mirror of
https://github.com/EdgeTX/edgetx.git
synced 2025-07-25 17:25:10 +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)
|
uint32_t Boards::getFourCC(Type board)
|
||||||
{
|
{
|
||||||
switch (board) {
|
switch (board) {
|
||||||
case BOARD_X12S:
|
case BOARD_HORUS_X12S:
|
||||||
return 0x3478746F;
|
return 0x3478746F;
|
||||||
case BOARD_X10:
|
case BOARD_X10:
|
||||||
case BOARD_X10_EXPRESS:
|
case BOARD_X10_EXPRESS:
|
||||||
|
@ -82,8 +82,8 @@ uint32_t Boards::getFourCC(Type board)
|
||||||
case BOARD_MEGA2560:
|
case BOARD_MEGA2560:
|
||||||
case BOARD_GRUVIN9X:
|
case BOARD_GRUVIN9X:
|
||||||
return 0x3178746F;
|
return 0x3178746F;
|
||||||
case BOARD_STOCK:
|
case BOARD_9X_M64:
|
||||||
case BOARD_M128:
|
case BOARD_9X_M128:
|
||||||
return 0;
|
return 0;
|
||||||
case BOARD_JUMPER_T12:
|
case BOARD_JUMPER_T12:
|
||||||
return 0x3D78746F;
|
return 0x3D78746F;
|
||||||
|
@ -97,9 +97,9 @@ uint32_t Boards::getFourCC(Type board)
|
||||||
int Boards::getEEpromSize(Board::Type board)
|
int Boards::getEEpromSize(Board::Type board)
|
||||||
{
|
{
|
||||||
switch (board) {
|
switch (board) {
|
||||||
case BOARD_STOCK:
|
case BOARD_9X_M64:
|
||||||
return EESIZE_STOCK;
|
return EESIZE_STOCK;
|
||||||
case BOARD_M128:
|
case BOARD_9X_M128:
|
||||||
return EESIZE_M128;
|
return EESIZE_M128;
|
||||||
case BOARD_MEGA2560:
|
case BOARD_MEGA2560:
|
||||||
case BOARD_GRUVIN9X:
|
case BOARD_GRUVIN9X:
|
||||||
|
@ -121,7 +121,7 @@ int Boards::getEEpromSize(Board::Type board)
|
||||||
return EESIZE_TARANIS;
|
return EESIZE_TARANIS;
|
||||||
case BOARD_UNKNOWN:
|
case BOARD_UNKNOWN:
|
||||||
return EESIZE_MAX;
|
return EESIZE_MAX;
|
||||||
case BOARD_X12S:
|
case BOARD_HORUS_X12S:
|
||||||
case BOARD_X10:
|
case BOARD_X10:
|
||||||
case BOARD_X10_EXPRESS:
|
case BOARD_X10_EXPRESS:
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -133,9 +133,9 @@ int Boards::getEEpromSize(Board::Type board)
|
||||||
int Boards::getFlashSize(Type board)
|
int Boards::getFlashSize(Type board)
|
||||||
{
|
{
|
||||||
switch (board) {
|
switch (board) {
|
||||||
case BOARD_STOCK:
|
case BOARD_9X_M64:
|
||||||
return FSIZE_STOCK;
|
return FSIZE_STOCK;
|
||||||
case BOARD_M128:
|
case BOARD_9X_M128:
|
||||||
return FSIZE_M128;
|
return FSIZE_M128;
|
||||||
case BOARD_MEGA2560:
|
case BOARD_MEGA2560:
|
||||||
case BOARD_GRUVIN9X:
|
case BOARD_GRUVIN9X:
|
||||||
|
@ -155,7 +155,7 @@ int Boards::getFlashSize(Type board)
|
||||||
case BOARD_TARANIS_X9E:
|
case BOARD_TARANIS_X9E:
|
||||||
case BOARD_JUMPER_T12:
|
case BOARD_JUMPER_T12:
|
||||||
return FSIZE_TARANIS;
|
return FSIZE_TARANIS;
|
||||||
case BOARD_X12S:
|
case BOARD_HORUS_X12S:
|
||||||
case BOARD_X10:
|
case BOARD_X10:
|
||||||
case BOARD_X10_EXPRESS:
|
case BOARD_X10_EXPRESS:
|
||||||
return FSIZE_HORUS;
|
return FSIZE_HORUS;
|
||||||
|
@ -479,9 +479,9 @@ bool Boards::isBoardCompatible(Type board1, Type board2)
|
||||||
QString Boards::getBoardName(Board::Type board)
|
QString Boards::getBoardName(Board::Type board)
|
||||||
{
|
{
|
||||||
switch (board) {
|
switch (board) {
|
||||||
case BOARD_STOCK:
|
case BOARD_9X_M64:
|
||||||
return "9X";
|
return "9X";
|
||||||
case BOARD_M128:
|
case BOARD_9X_M128:
|
||||||
return "9X128";
|
return "9X128";
|
||||||
case BOARD_GRUVIN9X:
|
case BOARD_GRUVIN9X:
|
||||||
return "Gruvin9x";
|
return "Gruvin9x";
|
||||||
|
@ -511,7 +511,7 @@ QString Boards::getBoardName(Board::Type board)
|
||||||
return "9XR-PRO";
|
return "9XR-PRO";
|
||||||
case BOARD_AR9X:
|
case BOARD_AR9X:
|
||||||
return "AR9X";
|
return "AR9X";
|
||||||
case BOARD_X12S:
|
case BOARD_HORUS_X12S:
|
||||||
return "Horus X12S";
|
return "Horus X12S";
|
||||||
case BOARD_X10:
|
case BOARD_X10:
|
||||||
return "Horus X10/X10S";
|
return "Horus X10/X10S";
|
||||||
|
|
|
@ -32,8 +32,8 @@ namespace Board {
|
||||||
enum Type
|
enum Type
|
||||||
{
|
{
|
||||||
BOARD_UNKNOWN = -1,
|
BOARD_UNKNOWN = -1,
|
||||||
BOARD_STOCK = 0,
|
BOARD_9X_M64 = 0,
|
||||||
BOARD_M128,
|
BOARD_9X_M128,
|
||||||
BOARD_MEGA2560,
|
BOARD_MEGA2560,
|
||||||
BOARD_GRUVIN9X,
|
BOARD_GRUVIN9X,
|
||||||
BOARD_SKY9X,
|
BOARD_SKY9X,
|
||||||
|
@ -44,7 +44,7 @@ namespace Board {
|
||||||
BOARD_TARANIS_X9DP,
|
BOARD_TARANIS_X9DP,
|
||||||
BOARD_TARANIS_X9DP_2019,
|
BOARD_TARANIS_X9DP_2019,
|
||||||
BOARD_TARANIS_X9E,
|
BOARD_TARANIS_X9E,
|
||||||
BOARD_X12S,
|
BOARD_HORUS_X12S,
|
||||||
BOARD_X10,
|
BOARD_X10,
|
||||||
BOARD_X10_EXPRESS,
|
BOARD_X10_EXPRESS,
|
||||||
BOARD_TARANIS_XLITE,
|
BOARD_TARANIS_XLITE,
|
||||||
|
@ -187,29 +187,129 @@ class Boards
|
||||||
// temporary aliases for transition period, use Boards class instead.
|
// temporary aliases for transition period, use Boards class instead.
|
||||||
#define getBoardCapability(b__, c__) Boards::getCapability(b__, c__)
|
#define getBoardCapability(b__, c__) Boards::getCapability(b__, c__)
|
||||||
|
|
||||||
#define IS_9X(board) (board==Board::BOARD_STOCK || board==Board::BOARD_M128)
|
inline bool IS_9X(Board::Type board)
|
||||||
#define IS_STOCK(board) (board==Board::BOARD_STOCK)
|
{
|
||||||
#define IS_M128(board) (board==Board::BOARD_M128)
|
return board == Board::BOARD_9X_M64 || board == Board::BOARD_9X_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)
|
inline bool IS_STOCK(Board::Type board)
|
||||||
#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)
|
return board == Board::BOARD_9X_M64;
|
||||||
#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)
|
inline bool IS_M128(Board::Type board)
|
||||||
#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)
|
return board == Board::BOARD_9X_M128;
|
||||||
#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))
|
inline bool IS_2560(Board::Type 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)
|
return board == Board::BOARD_GRUVIN9X || board == Board::BOARD_MEGA2560;
|
||||||
#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))
|
inline bool IS_SKY9X(Board::Type board)
|
||||||
#define IS_STM32(board) (IS_TARANIS(board) || IS_HORUS(board))
|
{
|
||||||
#define IS_ARM(board) (IS_STM32(board) || IS_SKY9X(board))
|
return board == Board::BOARD_SKY9X || board == Board::BOARD_9XRPRO || board == Board::BOARD_AR9X;
|
||||||
#define HAS_LARGE_LCD(board) (IS_HORUS(board) || IS_TARANIS_X9(board))
|
}
|
||||||
|
|
||||||
|
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_
|
#endif // _BOARDS_H_
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
#define FILE_MODEL(n) (1+n)
|
#define FILE_MODEL(n) (1+n)
|
||||||
|
|
||||||
Er9xInterface::Er9xInterface():
|
Er9xInterface::Er9xInterface():
|
||||||
EEPROMInterface(Board::BOARD_STOCK),
|
EEPROMInterface(Board::BOARD_9X_M64),
|
||||||
efile(new RleFile())
|
efile(new RleFile())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -120,13 +120,13 @@ unsigned long Er9xInterface::load(RadioData &radioData, const uint8_t *eeprom, i
|
||||||
|
|
||||||
std::bitset<NUM_ERRORS> errors;
|
std::bitset<NUM_ERRORS> errors;
|
||||||
|
|
||||||
if (size != Boards::getEEpromSize(Board::BOARD_STOCK)) {
|
if (size != Boards::getEEpromSize(Board::BOARD_9X_M64)) {
|
||||||
dbg << "wrong size";
|
dbg << "wrong size";
|
||||||
errors.set(WRONG_SIZE);
|
errors.set(WRONG_SIZE);
|
||||||
return errors.to_ulong();
|
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";
|
dbg << "wrong file system";
|
||||||
errors.set(WRONG_FILE_SYSTEM);
|
errors.set(WRONG_FILE_SYSTEM);
|
||||||
return errors.to_ulong();
|
return errors.to_ulong();
|
||||||
|
|
|
@ -151,7 +151,8 @@ class GeneralSettings {
|
||||||
int backgroundVolume;
|
int backgroundVolume;
|
||||||
unsigned int mavbaud;
|
unsigned int mavbaud;
|
||||||
unsigned int switchUnlockStates;
|
unsigned int switchUnlockStates;
|
||||||
unsigned int auxSerialMode; // UartModes
|
unsigned int auxSerialMode;
|
||||||
|
int antennaMode;
|
||||||
unsigned int backlightColor;
|
unsigned int backlightColor;
|
||||||
CustomFunctionData customFn[CPN_MAX_SPECIAL_FUNCTIONS];
|
CustomFunctionData customFn[CPN_MAX_SPECIAL_FUNCTIONS];
|
||||||
char switchName[CPN_MAX_SWITCHES][3+1];
|
char switchName[CPN_MAX_SWITCHES][3+1];
|
||||||
|
|
|
@ -96,10 +96,6 @@ QString ModuleData::subTypeToString(int type) const
|
||||||
QString ModuleData::powerValueToString(Firmware * fw) const
|
QString ModuleData::powerValueToString(Firmware * fw) const
|
||||||
{
|
{
|
||||||
const QStringList & strRef = powerValueStrings(subType, fw);
|
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);
|
return strRef.value(pxx.power, CPN_STR_UNKNOWN_ITEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -169,10 +169,9 @@ class ModuleData {
|
||||||
|
|
||||||
struct PXX {
|
struct PXX {
|
||||||
unsigned int power; // 0 10 mW, 1 100 mW, 2 500 mW, 3 1W
|
unsigned int power; // 0 10 mW, 1 100 mW, 2 500 mW, 3 1W
|
||||||
bool receiver_telem_off; // false = receiver telem enabled
|
bool receiverTelemetryOff; // false = receiver telem enabled
|
||||||
bool receiver_channel_9_16; // false = pwm out 1-8, true 9-16
|
bool receiverHigherChannels; // false = pwm out 1-8, true 9-16
|
||||||
bool external_antenna; // false = internal antenna, true = external antenna
|
int antennaMode; // false = internal antenna, true = external antenna
|
||||||
bool sport_out;
|
|
||||||
} pxx;
|
} pxx;
|
||||||
|
|
||||||
struct Access {
|
struct Access {
|
||||||
|
|
|
@ -716,7 +716,7 @@ class FlightModeField: public TransformedField {
|
||||||
trim = 501 + phase.trimRef[i] - (phase.trimRef[i] > index ? 1 : 0);
|
trim = 501 + phase.trimRef[i] - (phase.trimRef[i] > index ? 1 : 0);
|
||||||
else
|
else
|
||||||
trim = std::max(-500, std::min(500, phase.trim[i]));
|
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;
|
trimBase[i] = trim >> 2;
|
||||||
trimExt[i] = (trim & 0x03);
|
trimExt[i] = (trim & 0x03);
|
||||||
}
|
}
|
||||||
|
@ -747,7 +747,7 @@ class FlightModeField: public TransformedField {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int trim;
|
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);
|
trim = ((trimBase[i]) << 2) + (trimExt[i] & 0x03);
|
||||||
else
|
else
|
||||||
trim = trimBase[i];
|
trim = trimBase[i];
|
||||||
|
@ -2067,10 +2067,10 @@ class ModuleUnionField: public UnionField<unsigned int> {
|
||||||
ModuleData::PXX& pxx = module.pxx;
|
ModuleData::PXX& pxx = module.pxx;
|
||||||
internalField.Append(new UnsignedField<2>(this, pxx.power));
|
internalField.Append(new UnsignedField<2>(this, pxx.power));
|
||||||
internalField.Append(new SpareBitsField<2>(this));
|
internalField.Append(new SpareBitsField<2>(this));
|
||||||
internalField.Append(new BoolField<1>(this, pxx.receiver_telem_off));
|
internalField.Append(new BoolField<1>(this, pxx.receiverTelemetryOff));
|
||||||
internalField.Append(new BoolField<1>(this, pxx.receiver_channel_9_16));
|
internalField.Append(new BoolField<1>(this, pxx.receiverHigherChannels));
|
||||||
internalField.Append(new BoolField<1>(this, pxx.external_antenna));
|
internalField.Append(new SignedField<2>(this, pxx.antennaMode));
|
||||||
internalField.Append(new BoolField<1>(this, pxx.sport_out));
|
internalField.Append(new SpareBitsField<8>(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool select(const unsigned int& attr) const override {
|
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 UnsignedField<8>(this, generalData.vBatWarn));
|
||||||
internalField.Append(new SignedField<8>(this, generalData.txVoltageCalibration));
|
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]));
|
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<6>(this, generalData.trainer.mix[i].src));
|
||||||
internalField.Append(new UnsignedField<2>(this, generalData.trainer.mix[i].mode));
|
internalField.Append(new UnsignedField<2>(this, generalData.trainer.mix[i].mode));
|
||||||
internalField.Append(new SignedField<8>(this, generalData.trainer.mix[i].weight));
|
internalField.Append(new SignedField<8>(this, generalData.trainer.mix[i].weight));
|
||||||
|
|
|
@ -58,9 +58,9 @@ OpenTxEepromInterface::~OpenTxEepromInterface()
|
||||||
const char * OpenTxEepromInterface::getName()
|
const char * OpenTxEepromInterface::getName()
|
||||||
{
|
{
|
||||||
switch (board) {
|
switch (board) {
|
||||||
case BOARD_STOCK:
|
case BOARD_9X_M64:
|
||||||
return "OpenTX for 9X board";
|
return "OpenTX for 9X board";
|
||||||
case BOARD_M128:
|
case BOARD_9X_M128:
|
||||||
return "OpenTX for M128 / 9X board";
|
return "OpenTX for M128 / 9X board";
|
||||||
case BOARD_MEGA2560:
|
case BOARD_MEGA2560:
|
||||||
return "OpenTX for MEGA2560 board";
|
return "OpenTX for MEGA2560 board";
|
||||||
|
@ -90,7 +90,7 @@ const char * OpenTxEepromInterface::getName()
|
||||||
return "OpenTX for 9XR-PRO";
|
return "OpenTX for 9XR-PRO";
|
||||||
case BOARD_AR9X:
|
case BOARD_AR9X:
|
||||||
return "OpenTX for ar9x board / 9X";
|
return "OpenTX for ar9x board / 9X";
|
||||||
case BOARD_X12S:
|
case BOARD_HORUS_X12S:
|
||||||
return "OpenTX for FrSky Horus";
|
return "OpenTX for FrSky Horus";
|
||||||
case BOARD_X10:
|
case BOARD_X10:
|
||||||
return "OpenTX for FrSky 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)
|
uint8_t OpenTxEepromInterface::getLastDataVersion(Board::Type board)
|
||||||
{
|
{
|
||||||
switch (board) {
|
switch (board) {
|
||||||
case BOARD_STOCK:
|
case BOARD_9X_M64:
|
||||||
return 216;
|
return 216;
|
||||||
case BOARD_GRUVIN9X:
|
case BOARD_GRUVIN9X:
|
||||||
case BOARD_MEGA2560:
|
case BOARD_MEGA2560:
|
||||||
case BOARD_M128:
|
case BOARD_9X_M128:
|
||||||
return 217;
|
return 217;
|
||||||
default:
|
default:
|
||||||
return 219;
|
return 219;
|
||||||
|
@ -317,7 +317,7 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u
|
||||||
|
|
||||||
efile->EeFsCreate(eeprom, size, board, version);
|
efile->EeFsCreate(eeprom, size, board, version);
|
||||||
|
|
||||||
if (board == BOARD_M128) {
|
if (board == BOARD_9X_M128) {
|
||||||
variant |= M128_VARIANT;
|
variant |= M128_VARIANT;
|
||||||
}
|
}
|
||||||
else if (IS_TARANIS_X9E(board)) {
|
else if (IS_TARANIS_X9E(board)) {
|
||||||
|
@ -433,7 +433,7 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
return 0;
|
return 0;
|
||||||
else if (IS_ARM(board))
|
else if (IS_ARM(board))
|
||||||
return 60;
|
return 60;
|
||||||
else if (board == BOARD_M128)
|
else if (board == BOARD_9X_M128)
|
||||||
return 30;
|
return 30;
|
||||||
else if (IS_2560(board))
|
else if (IS_2560(board))
|
||||||
return 30;
|
return 30;
|
||||||
|
@ -512,7 +512,7 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
case CustomFunctions:
|
case CustomFunctions:
|
||||||
if (IS_ARM(board))
|
if (IS_ARM(board))
|
||||||
return 64;
|
return 64;
|
||||||
else if (IS_2560(board) || board == BOARD_M128)
|
else if (IS_2560(board) || board == BOARD_9X_M128)
|
||||||
return 24;
|
return 24;
|
||||||
else
|
else
|
||||||
return 16;
|
return 16;
|
||||||
|
@ -703,9 +703,9 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||||
case HasMahPersistent:
|
case HasMahPersistent:
|
||||||
return (IS_ARM(board) ? true : false);
|
return (IS_ARM(board) ? true : false);
|
||||||
case SimulatorVariant:
|
case SimulatorVariant:
|
||||||
if (board == BOARD_STOCK)
|
if (board == BOARD_9X_M64)
|
||||||
return SIMU_STOCK_VARIANTS;
|
return SIMU_STOCK_VARIANTS;
|
||||||
else if (board == BOARD_M128)
|
else if (board == BOARD_9X_M128)
|
||||||
return SIMU_M128_VARIANTS;
|
return SIMU_M128_VARIANTS;
|
||||||
else if (IS_TARANIS_X9E(board))
|
else if (IS_TARANIS_X9E(board))
|
||||||
return TARANIS_X9E_VARIANT;
|
return TARANIS_X9E_VARIANT;
|
||||||
|
@ -944,7 +944,7 @@ EepromLoadErrors OpenTxEepromInterface::checkVersion(unsigned int version)
|
||||||
bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int variant)
|
bool OpenTxEepromInterface::checkVariant(unsigned int version, unsigned int variant)
|
||||||
{
|
{
|
||||||
bool variantError = false;
|
bool variantError = false;
|
||||||
if (board == BOARD_M128 && !(variant & M128_VARIANT)) {
|
if (board == BOARD_9X_M128 && !(variant & M128_VARIANT)) {
|
||||||
if (version == 212) {
|
if (version == 212) {
|
||||||
uint8_t tmp[1000];
|
uint8_t tmp[1000];
|
||||||
for (int i = 1; i < 31; i++) {
|
for (int i = 1; i < 31; i++) {
|
||||||
|
@ -1267,7 +1267,7 @@ void registerOpenTxFirmwares()
|
||||||
registerOpenTxFirmware(firmware);
|
registerOpenTxFirmware(firmware);
|
||||||
|
|
||||||
/* FrSky X12 (Horus) board */
|
/* 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);
|
addOpenTxFrskyOptions(firmware);
|
||||||
firmware->addOption("internalaccess", Firmware::tr("Support for ACCESS internal module replacement"));
|
firmware->addOption("internalaccess", Firmware::tr("Support for ACCESS internal module replacement"));
|
||||||
firmware->addOption("pcbdev", Firmware::tr("Use ONLY with first DEV pcb version"));
|
firmware->addOption("pcbdev", Firmware::tr("Use ONLY with first DEV pcb version"));
|
||||||
|
@ -1301,10 +1301,10 @@ void registerOpenTxFirmwares()
|
||||||
registerOpenTxFirmware(firmware);
|
registerOpenTxFirmware(firmware);
|
||||||
|
|
||||||
// These are kept only for import purposes, marked as deprecated to hide from UI.
|
// 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-9xr", Firmware::tr("Turnigy 9XR"), BOARD_9X_M64), true);
|
||||||
registerOpenTxFirmware(new OpenTxFirmware("opentx-9xr128", Firmware::tr("Turnigy 9XR with m128 chip"), BOARD_M128), 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_STOCK), 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_M128), 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-gruvin9x", Firmware::tr("9X with Gruvin9x board"), BOARD_GRUVIN9X), true);
|
||||||
registerOpenTxFirmware(new OpenTxFirmware("opentx-mega2560", Firmware::tr("DIY MEGA2560 radio"), BOARD_MEGA2560), 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;
|
RawSourceRange result;
|
||||||
|
|
||||||
Firmware * firmware = Firmware::getCurrentVariant();
|
Firmware * firmware = Firmware::getCurrentVariant();
|
||||||
int board = firmware->getBoard();
|
Board::Type board = firmware->getBoard();
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case SOURCE_TYPE_TELEMETRY:
|
case SOURCE_TYPE_TELEMETRY:
|
||||||
|
|
|
@ -183,6 +183,18 @@ HardwarePanel::HardwarePanel(QWidget * parent, GeneralSettings & generalSettings
|
||||||
ui->bluetoothWidget->hide();
|
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)) {
|
if (IS_HORUS_OR_TARANIS(board)) {
|
||||||
ui->filterEnable->setChecked(!generalSettings.jitterFilter);
|
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 ||
|
else if (protocol==PULSES_ACCESS_ISRM || protocol==PULSES_ACCESS_R9M ||
|
||||||
protocol==PULSES_ACCESS_R9M_LITE || protocol==PULSES_ACCESS_R9M_LITE_PRO)
|
protocol==PULSES_ACCESS_R9M_LITE || protocol==PULSES_ACCESS_R9M_LITE_PRO)
|
||||||
mask |= MASK_RX_NUMBER | MASK_ACCESS;
|
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;
|
mask |= MASK_ANTENNA;
|
||||||
break;
|
break;
|
||||||
case PULSES_LP45:
|
case PULSES_LP45:
|
||||||
|
@ -486,16 +486,18 @@ void ModulePanel::update()
|
||||||
ui->ppmFrameLength->setMaximum(firmware->getCapability(PPMFrameLength));
|
ui->ppmFrameLength->setMaximum(firmware->getCapability(PPMFrameLength));
|
||||||
ui->ppmFrameLength->setValue(22.5+((double)module.ppm.frameLength)*0.5);
|
ui->ppmFrameLength->setValue(22.5+((double)module.ppm.frameLength)*0.5);
|
||||||
|
|
||||||
// Antenna selection on Horus and xlite
|
// Antenna mode on Horus and XLite
|
||||||
ui->label_antenna->setVisible(mask & MASK_ANTENNA);
|
if (mask & MASK_ANTENNA) {
|
||||||
ui->antennaMode->setVisible(mask & MASK_ANTENNA);
|
ui->antennaMode->clear();
|
||||||
if IS_HORUS_X12S(board) {
|
ui->antennaMode->addItem(tr("Ask"), -1);
|
||||||
ui->antennaMode->setItemText(1,tr("Ext. + Int"));
|
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 {
|
else {
|
||||||
ui->antennaMode->setItemText(1,tr("External"));
|
ui->antennaLabel->hide();
|
||||||
|
ui->antennaMode->hide();
|
||||||
}
|
}
|
||||||
ui->antennaMode->setCurrentIndex(module.pxx.external_antenna);
|
|
||||||
|
|
||||||
// R9M options
|
// R9M options
|
||||||
ui->r9mPower->setVisible(mask & MASK_R9M);
|
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)
|
void ModulePanel::on_r9mPower_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
if (!lock && module.pxx.power != (unsigned 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_ppmPolarity_currentIndexChanged(int index);
|
||||||
void on_ppmOutputType_currentIndexChanged(int index);
|
void on_ppmOutputType_currentIndexChanged(int index);
|
||||||
void on_ppmFrameLength_editingFinished();
|
void on_ppmFrameLength_editingFinished();
|
||||||
void on_antennaMode_currentIndexChanged(int index);
|
|
||||||
void on_rxNumber_editingFinished();
|
void on_rxNumber_editingFinished();
|
||||||
void on_failsafeMode_currentIndexChanged(int value);
|
void on_failsafeMode_currentIndexChanged(int value);
|
||||||
void onMultiProtocolChanged(int index);
|
void onMultiProtocolChanged(int index);
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>1042</width>
|
<width>1075</width>
|
||||||
<height>375</height>
|
<height>434</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
@ -252,7 +252,7 @@
|
||||||
<item row="4" column="1">
|
<item row="4" column="1">
|
||||||
<layout class="QHBoxLayout" name="rx1Layout">
|
<layout class="QHBoxLayout" name="rx1Layout">
|
||||||
<property name="spacing">
|
<property name="spacing">
|
||||||
<number>-1</number>
|
<number>6</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="topMargin">
|
<property name="topMargin">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
|
@ -595,7 +595,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QLabel" name="label_antenna">
|
<widget class="QLabel" name="antennaLabel">
|
||||||
<property name="maximumSize">
|
<property name="maximumSize">
|
||||||
<size>
|
<size>
|
||||||
<width>16777215</width>
|
<width>16777215</width>
|
||||||
|
@ -611,7 +611,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="1">
|
<item row="3" column="1">
|
||||||
<widget class="QComboBox" name="antennaMode">
|
<widget class="AutoComboBox" name="antennaMode">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
|
@ -621,16 +621,6 @@
|
||||||
<property name="sizeAdjustPolicy">
|
<property name="sizeAdjustPolicy">
|
||||||
<enum>QComboBox::AdjustToContents</enum>
|
<enum>QComboBox::AdjustToContents</enum>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Internal</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Ext. + Int.</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0">
|
<item row="5" column="0">
|
||||||
|
@ -732,6 +722,26 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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">
|
<item row="2" column="0">
|
||||||
<widget class="QLabel" name="label_multiProtocol">
|
<widget class="QLabel" name="label_multiProtocol">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -775,6 +785,50 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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">
|
<item row="5" column="0">
|
||||||
<widget class="QLabel" name="label_failsafeMode">
|
<widget class="QLabel" name="label_failsafeMode">
|
||||||
<property name="maximumSize">
|
<property name="maximumSize">
|
||||||
|
@ -883,70 +937,6 @@
|
||||||
</item>
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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">
|
<item row="7" column="0" colspan="2">
|
||||||
<spacer name="horizontalSpacer_3">
|
<spacer name="horizontalSpacer_3">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
@ -1069,6 +1059,13 @@ QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; pad
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>AutoComboBox</class>
|
||||||
|
<extends>QComboBox</extends>
|
||||||
|
<header>autocombobox.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>protocol</tabstop>
|
<tabstop>protocol</tabstop>
|
||||||
<tabstop>channelsStart</tabstop>
|
<tabstop>channelsStart</tabstop>
|
||||||
|
|
|
@ -223,7 +223,6 @@ QString ModelPrinter::printModule(int idx)
|
||||||
if (module.protocol == PULSES_PXX_R9M) {
|
if (module.protocol == PULSES_PXX_R9M) {
|
||||||
str << printLabelValue(tr("Sub Type"), module.subTypeToString());
|
str << printLabelValue(tr("Sub Type"), module.subTypeToString());
|
||||||
str << printLabelValue(tr("RF Output Power"), module.powerValueToString(firmware));
|
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";
|
args << "-c" << programmer << "-p";
|
||||||
if (IS_2560(board))
|
if (IS_2560(board))
|
||||||
args << "m2560";
|
args << "m2560";
|
||||||
else if (board == Board::BOARD_M128)
|
else if (board == Board::BOARD_9X_M128)
|
||||||
args << "m128";
|
args << "m128";
|
||||||
else
|
else
|
||||||
args << mcu;
|
args << mcu;
|
||||||
|
|
|
@ -29,12 +29,8 @@ class AutoComboBox: public QComboBox
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit AutoComboBox(QWidget *parent = 0):
|
explicit AutoComboBox(QWidget *parent = nullptr):
|
||||||
QComboBox(parent),
|
QComboBox(parent)
|
||||||
field(NULL),
|
|
||||||
panel(NULL),
|
|
||||||
next(0),
|
|
||||||
lock(false)
|
|
||||||
{
|
{
|
||||||
connect(this, SIGNAL(currentIndexChanged(int)), this, SLOT(onCurrentIndexChanged(int)));
|
connect(this, SIGNAL(currentIndexChanged(int)), this, SLOT(onCurrentIndexChanged(int)));
|
||||||
}
|
}
|
||||||
|
@ -67,14 +63,14 @@ class AutoComboBox: public QComboBox
|
||||||
updateValue();
|
updateValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setField(unsigned int & field, GenericPanel * panel=NULL)
|
void setField(unsigned int & field, GenericPanel * panel=nullptr)
|
||||||
{
|
{
|
||||||
this->field = (int *)&field;
|
this->field = (int *)&field;
|
||||||
this->panel = panel;
|
this->panel = panel;
|
||||||
updateValue();
|
updateValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setField(int & field, GenericPanel * panel=NULL)
|
void setField(int & field, GenericPanel * panel=nullptr)
|
||||||
{
|
{
|
||||||
this->field = &field;
|
this->field = &field;
|
||||||
this->panel = panel;
|
this->panel = panel;
|
||||||
|
@ -113,10 +109,10 @@ class AutoComboBox: public QComboBox
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int * field;
|
int * field = nullptr;
|
||||||
GenericPanel * panel;
|
GenericPanel * panel = nullptr;
|
||||||
int next;
|
int next = 0;
|
||||||
bool lock;
|
bool lock = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _AUTOCOMBOBOX_H_
|
#endif // _AUTOCOMBOBOX_H_
|
||||||
|
|
|
@ -77,7 +77,7 @@ SimulatorWidget::SimulatorWidget(QWidget * parent, SimulatorInterface * simulato
|
||||||
case Board::BOARD_TARANIS_X9E:
|
case Board::BOARD_TARANIS_X9E:
|
||||||
radioUiWidget = new SimulatedUIWidgetX9E(simulator, this);
|
radioUiWidget = new SimulatedUIWidgetX9E(simulator, this);
|
||||||
break;
|
break;
|
||||||
case Board::BOARD_X12S:
|
case Board::BOARD_HORUS_X12S:
|
||||||
radioUiWidget = new SimulatedUIWidgetX12(simulator, this);
|
radioUiWidget = new SimulatedUIWidgetX12(simulator, this);
|
||||||
break;
|
break;
|
||||||
case Board::BOARD_X10:
|
case Board::BOARD_X10:
|
||||||
|
|
|
@ -86,7 +86,7 @@ void RleFile::EeFsCreate(uint8_t *eeprom, int size, Board::Type board, unsigned
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
eeFs = (EeFs *)eeprom;
|
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;
|
eeFsBlockSize = 16;
|
||||||
eeFsLinkSize = 1;
|
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 {
|
NOBACKUP(struct {
|
||||||
uint8_t power:2; // 0=10 mW, 1=100 mW, 2=500 mW, 3=1W
|
uint8_t power:2; // 0=10 mW, 1=100 mW, 2=500 mW, 3=1W
|
||||||
uint8_t spare1:2;
|
uint8_t spare1:2;
|
||||||
uint8_t receiver_telem_off:1; // false = receiver telem enabled
|
uint8_t receiverTelemetryOff:1; // false = receiver telem enabled
|
||||||
uint8_t receiver_channel_9_16:1; // false = pwm out 1-8, true 9-16
|
uint8_t receiverHigherChannels:1; // false = pwm out 1-8, true 9-16
|
||||||
uint8_t external_antenna:1; // false = internal antenna, true = external antenna
|
int8_t antennaMode:2;
|
||||||
uint8_t fast:1; // TODO: to be used later by external module (fast means serial @ high speed)
|
|
||||||
uint8_t spare2;
|
uint8_t spare2;
|
||||||
} pxx);
|
} pxx);
|
||||||
NOBACKUP(struct {
|
NOBACKUP(struct {
|
||||||
|
@ -672,13 +671,13 @@ PACK(struct TrainerData {
|
||||||
NOBACKUP(char switchNames[STORAGE_NUM_SWITCHES][LEN_SWITCH_NAME]); \
|
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 anaNames[NUM_STICKS + STORAGE_NUM_POTS + STORAGE_NUM_SLIDERS][LEN_ANA_NAME]); \
|
||||||
NOBACKUP(char currModelFilename[LEN_MODEL_FILENAME+1]); \
|
NOBACKUP(char currModelFilename[LEN_MODEL_FILENAME+1]); \
|
||||||
NOBACKUP(uint8_t spare4:1); \
|
NOBACKUP(uint8_t spare5:1); \
|
||||||
NOBACKUP(uint8_t blOffBright:7); \
|
NOBACKUP(uint8_t blOffBright:7); \
|
||||||
NOBACKUP(char bluetoothName[LEN_BLUETOOTH_NAME]);
|
NOBACKUP(char bluetoothName[LEN_BLUETOOTH_NAME]);
|
||||||
#elif defined(PCBTARANIS)
|
#elif defined(PCBTARANIS)
|
||||||
#if defined(STORAGE_BLUETOOTH)
|
#if defined(STORAGE_BLUETOOTH)
|
||||||
#define BLUETOOTH_FIELDS \
|
#define BLUETOOTH_FIELDS \
|
||||||
uint8_t spare4; \
|
uint8_t spare5; \
|
||||||
char bluetoothName[LEN_BLUETOOTH_NAME];
|
char bluetoothName[LEN_BLUETOOTH_NAME];
|
||||||
#else
|
#else
|
||||||
#define BLUETOOTH_FIELDS
|
#define BLUETOOTH_FIELDS
|
||||||
|
@ -696,7 +695,7 @@ PACK(struct TrainerData {
|
||||||
#elif defined(PCBSKY9X)
|
#elif defined(PCBSKY9X)
|
||||||
#define EXTRA_GENERAL_FIELDS \
|
#define EXTRA_GENERAL_FIELDS \
|
||||||
int8_t txCurrentCalibration; \
|
int8_t txCurrentCalibration; \
|
||||||
int8_t spare4; \
|
int8_t spare5; \
|
||||||
uint8_t mAhWarn; \
|
uint8_t mAhWarn; \
|
||||||
uint16_t mAhUsed; \
|
uint16_t mAhUsed; \
|
||||||
int8_t temperatureCalib; \
|
int8_t temperatureCalib; \
|
||||||
|
@ -722,7 +721,7 @@ PACK(struct TrainerData {
|
||||||
#if defined(BUZZER)
|
#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)
|
#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
|
#else
|
||||||
#define BUZZER_FIELD int8_t spare3:2
|
#define BUZZER_FIELD int8_t spare4:2
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PACK(struct RadioData {
|
PACK(struct RadioData {
|
||||||
|
@ -734,7 +733,9 @@ PACK(struct RadioData {
|
||||||
N_HORUS_FIELD(uint8_t contrast);
|
N_HORUS_FIELD(uint8_t contrast);
|
||||||
NOBACKUP(uint8_t vBatWarn);
|
NOBACKUP(uint8_t vBatWarn);
|
||||||
NOBACKUP(int8_t txVoltageCalibration);
|
NOBACKUP(int8_t txVoltageCalibration);
|
||||||
NOBACKUP(int8_t backlightMode);
|
uint8_t backlightMode:3;
|
||||||
|
int8_t antennaMode:2;
|
||||||
|
int8_t spare1:3;
|
||||||
NOBACKUP(TrainerData trainer);
|
NOBACKUP(TrainerData trainer);
|
||||||
NOBACKUP(uint8_t view); // index of view in main screen
|
NOBACKUP(uint8_t view); // index of view in main screen
|
||||||
NOBACKUP(BUZZER_FIELD); /* 2bits */
|
NOBACKUP(BUZZER_FIELD); /* 2bits */
|
||||||
|
@ -755,7 +756,7 @@ PACK(struct RadioData {
|
||||||
NOBACKUP(uint8_t templateSetup); // RETA order for receiver channels
|
NOBACKUP(uint8_t templateSetup); // RETA order for receiver channels
|
||||||
NOBACKUP(int8_t PPM_Multiplier);
|
NOBACKUP(int8_t PPM_Multiplier);
|
||||||
NOBACKUP(int8_t hapticLength);
|
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));
|
N_HORUS_FIELD(N_TARANIS_FIELD(uint8_t stickReverse));
|
||||||
NOBACKUP(int8_t beepLength:3);
|
NOBACKUP(int8_t beepLength:3);
|
||||||
NOBACKUP(int8_t hapticStrength:3);
|
NOBACKUP(int8_t hapticStrength:3);
|
||||||
|
@ -778,7 +779,7 @@ PACK(struct RadioData {
|
||||||
NOBACKUP(uint8_t disableRssiPoweroffAlarm:1);
|
NOBACKUP(uint8_t disableRssiPoweroffAlarm:1);
|
||||||
NOBACKUP(uint8_t USBMode:2);
|
NOBACKUP(uint8_t USBMode:2);
|
||||||
NOBACKUP(uint8_t jackMode:2);
|
NOBACKUP(uint8_t jackMode:2);
|
||||||
NOBACKUP(uint8_t spare2:1);
|
NOBACKUP(uint8_t spare3:1);
|
||||||
NOBACKUP(char ttsLanguage[2]);
|
NOBACKUP(char ttsLanguage[2]);
|
||||||
NOBACKUP(int8_t beepVolume:4);
|
NOBACKUP(int8_t beepVolume:4);
|
||||||
NOBACKUP(int8_t wavVolume:4);
|
NOBACKUP(int8_t wavVolume:4);
|
||||||
|
|
|
@ -183,8 +183,7 @@ void title(const char * s);
|
||||||
title(name)
|
title(name)
|
||||||
|
|
||||||
typedef int choice_t;
|
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, IsValueAvailable isValueAvailable = nullptr);
|
||||||
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);
|
|
||||||
uint8_t editCheckBox(uint8_t value, coord_t x, coord_t y, const char * label, LcdFlags attr, event_t event);
|
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);
|
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
|
#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)
|
void onModelSelectMenu(const char * result)
|
||||||
{
|
{
|
||||||
int8_t sub = menuVerticalPosition;
|
int8_t sub = menuVerticalPosition;
|
||||||
|
@ -51,7 +60,7 @@ void onModelSelectMenu(const char * result)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else if (result == STR_DELETE_MODEL) {
|
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);
|
SET_WARNING_INFO(modelHeaders[sub].name, sizeof(g_model.header.name), ZCHAR);
|
||||||
}
|
}
|
||||||
#if defined(SDCARD)
|
#if defined(SDCARD)
|
||||||
|
@ -68,14 +77,6 @@ void onModelSelectMenu(const char * result)
|
||||||
|
|
||||||
void menuModelSelect(event_t event)
|
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;
|
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)) {
|
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;
|
_event_ = 0;
|
||||||
|
|
|
@ -87,7 +87,7 @@ enum MenuModelSetupItems {
|
||||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS,
|
||||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND,
|
||||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM,
|
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,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_ANTENNA,
|
||||||
#endif
|
#endif
|
||||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE,
|
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 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)
|
#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)
|
#if defined(PCBX7) || defined(PCBX9LITE)
|
||||||
#define ANTENNA_ROW
|
|
||||||
#if defined(BLUETOOTH)
|
#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)),
|
#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
|
#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_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
|
#define TRAINER_ROWS LABEL(Trainer), 0, TRAINER_BLUETOOTH_ROW TRAINER_CHANNELS_ROW, TRAINER_PPM_PARAMS_ROW
|
||||||
#elif defined(PCBXLITES)
|
#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_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_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
|
#define TRAINER_ROWS LABEL(Trainer), 0, IF_BT_TRAINER_ON(TRAINER_BLUETOOTH_ROW), TRAINER_CHANNELS_ROW, TRAINER_PPM_PARAMS_ROW
|
||||||
#elif defined(PCBXLITE)
|
#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_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 */
|
#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
|
#else
|
||||||
|
@ -271,7 +286,7 @@ void onBluetoothConnectMenu(const char * result)
|
||||||
INTERNAL_MODULE_CHANNELS_ROWS, \
|
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_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 */ \
|
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), /* RxNum */ \
|
||||||
ANTENNA_ROW \
|
EXTERNAL_ANTENNA_ROW \
|
||||||
IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), /* Failsafe */ \
|
IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), /* Failsafe */ \
|
||||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 1), /* Range check and Register buttons */ \
|
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 1), /* Range check and Register buttons */ \
|
||||||
IF_PXX2_MODULE(INTERNAL_MODULE, 0), /* Module options */ \
|
IF_PXX2_MODULE(INTERNAL_MODULE, 0), /* Module options */ \
|
||||||
|
@ -282,16 +297,6 @@ void onBluetoothConnectMenu(const char * result)
|
||||||
#define INTERNAL_MODULE_ROWS
|
#define INTERNAL_MODULE_ROWS
|
||||||
#endif
|
#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)
|
void menuModelSetup(event_t event)
|
||||||
{
|
{
|
||||||
int8_t old_editMode = s_editMode;
|
int8_t old_editMode = s_editMode;
|
||||||
|
@ -369,6 +374,9 @@ void menuModelSetup(event_t event)
|
||||||
if (event == EVT_ENTRY || event == EVT_ENTRY_UP) {
|
if (event == EVT_ENTRY || event == EVT_ENTRY_UP) {
|
||||||
memclear(&reusableBuffer.moduleSetup, sizeof(reusableBuffer.moduleSetup));
|
memclear(&reusableBuffer.moduleSetup, sizeof(reusableBuffer.moduleSetup));
|
||||||
reusableBuffer.moduleSetup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power;
|
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))
|
#if (defined(DSM2) || defined(PXX))
|
||||||
|
@ -1375,20 +1383,23 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(EXTERNAL_ANTENNA)
|
#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA)
|
||||||
case ITEM_MODEL_SETUP_INTERNAL_MODULE_ANTENNA:
|
case ITEM_MODEL_SETUP_INTERNAL_MODULE_ANTENNA:
|
||||||
{
|
reusableBuffer.moduleSetup.antennaMode = editChoice(MODEL_SETUP_2ND_COLUMN, y, INDENT TR_ANTENNA, STR_ANTENNA_MODES,
|
||||||
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);
|
reusableBuffer.moduleSetup.antennaMode == ANTENNA_MODE_PER_MODEL ? ANTENNA_MODE_INTERNAL : reusableBuffer.moduleSetup.antennaMode,
|
||||||
if (newAntennaSel != g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna && newAntennaSel == XJT_EXTERNAL_ANTENNA) {
|
ANTENNA_MODE_INTERNAL, ANTENNA_MODE_EXTERNAL, attr, event,
|
||||||
POPUP_CONFIRMATION(STR_ANTENNACONFIRM1, onAntennaSwitchConfirm);
|
[](int value) { return value != ANTENNA_MODE_PER_MODEL; });
|
||||||
const char * w = STR_ANTENNACONFIRM2;
|
if (event && !s_editMode && reusableBuffer.moduleSetup.antennaMode != g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode) {
|
||||||
SET_WARNING_INFO(w, strlen(w), 0);
|
if (reusableBuffer.moduleSetup.antennaMode == ANTENNA_MODE_EXTERNAL && !isExternalAntennaEnabled()) {
|
||||||
|
POPUP_CONFIRMATION(STR_ANTENNACONFIRM1, onModelAntennaSwitchConfirm);
|
||||||
|
SET_WARNING_INFO(STR_ANTENNACONFIRM2, sizeof(TR_ANTENNACONFIRM2), 0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna = newAntennaSel;
|
g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode = reusableBuffer.moduleSetup.antennaMode;
|
||||||
|
checkExternalAntenna();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_OPTIONS:
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_OPTIONS:
|
||||||
|
|
|
@ -50,16 +50,24 @@
|
||||||
#define RSSSI_X (30)
|
#define RSSSI_X (30)
|
||||||
#define RSSSI_Y (31)
|
#define RSSSI_Y (31)
|
||||||
#define RSSI_MAX 105
|
#define RSSI_MAX 105
|
||||||
|
|
||||||
#define TRIM_LEN 23
|
#define TRIM_LEN 23
|
||||||
|
|
||||||
void drawRSSIGauge()
|
void drawExternalAntennaAndRSSI()
|
||||||
{
|
{
|
||||||
uint8_t bar = (RSSI_MAX - g_model.rssiAlarms.getWarningRssi()) / 4;
|
#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA)
|
||||||
|
if (isModuleXJT(INTERNAL_MODULE) && isExternalAntennaEnabled()) {
|
||||||
|
lcdDrawText(VBATT_X-1, VBATT_Y+8, "E", TINSIZE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
for(uint8_t i=1; i<5; i++) {
|
if (TELEMETRY_RSSI() > 0) {
|
||||||
if((TELEMETRY_RSSI() - g_model.rssiAlarms.getWarningRssi()) > bar*(i-1)) {
|
auto warningRSSI = g_model.rssiAlarms.getWarningRssi();
|
||||||
lcdDrawFilledRect(RSSSI_X + i*4, RSSSI_Y - 2*i, 3, 2*i, SOLID, 0);
|
int8_t value = TELEMETRY_RSSI() - warningRSSI;
|
||||||
|
uint8_t step = (RSSI_MAX - warningRSSI) / 4;
|
||||||
|
for (uint8_t i = 1; i < 5; i++) {
|
||||||
|
if (value > step * (i - 1)) {
|
||||||
|
lcdDrawFilledRect(RSSSI_X + i * 4, RSSSI_Y - 2 * i + 1, 3, 2 * i - 1, SOLID, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -407,10 +415,8 @@ void menuMainView(event_t event)
|
||||||
// Trims sliders
|
// Trims sliders
|
||||||
displayTrims(mode);
|
displayTrims(mode);
|
||||||
|
|
||||||
// RSSI gauge
|
// RSSI gauge / external antenna
|
||||||
if (TELEMETRY_RSSI() > 0) {
|
drawExternalAntennaAndRSSI();
|
||||||
drawRSSIGauge();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (view_base < VIEW_INPUTS) {
|
if (view_base < VIEW_INPUTS) {
|
||||||
|
|
|
@ -111,7 +111,6 @@ void menuStatisticsDebug(event_t event)
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case EVT_ENTRY:
|
case EVT_ENTRY:
|
||||||
case EVT_ENTRY_UP:
|
case EVT_ENTRY_UP:
|
||||||
enableVBatBridge();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVT_KEY_LONG(KEY_ENTER):
|
case EVT_KEY_LONG(KEY_ENTER):
|
||||||
|
|
|
@ -70,11 +70,11 @@ void title(const char * s)
|
||||||
lcdDrawText(0, 0, s, INVERS);
|
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);
|
drawFieldLabel(x, y, label);
|
||||||
if (values) lcdDrawTextAtIndex(x, y, values, value-min, attr);
|
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;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -209,7 +209,7 @@ void title(const char * s);
|
||||||
|
|
||||||
typedef int choice_t;
|
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);
|
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);
|
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);
|
MENU_CHECK(menuTabModel, MENU_MODEL_SETUP, ITEM_MODEL_SETUP_LINES_COUNT);
|
||||||
title(STR_MENUSETUP);
|
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;
|
reusableBuffer.moduleSetup.r9mPower = g_model.moduleData[EXTERNAL_MODULE].pxx.power;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,10 +398,10 @@ void menuModelSetup(event_t event)
|
||||||
|
|
||||||
int sub = menuVerticalPosition;
|
int sub = menuVerticalPosition;
|
||||||
|
|
||||||
for (int i=0; i<NUM_BODY_LINES; ++i) {
|
for (int i = 0; i < NUM_BODY_LINES; ++i) {
|
||||||
coord_t y = MENU_HEADER_HEIGHT + 1 + i*FH;
|
coord_t y = MENU_HEADER_HEIGHT + 1 + i*FH;
|
||||||
uint8_t k = i+menuVerticalOffset;
|
uint8_t k = i + menuVerticalOffset;
|
||||||
for (int j=0; j<=k; j++) {
|
for (int j = 0; j <= k; j++) {
|
||||||
if (mstate_tab[j] == HIDDEN_ROW)
|
if (mstate_tab[j] == HIDDEN_ROW)
|
||||||
k++;
|
k++;
|
||||||
}
|
}
|
||||||
|
@ -408,7 +409,7 @@ void menuModelSetup(event_t event)
|
||||||
LcdFlags blink = ((s_editMode>0) ? BLINK|INVERS : INVERS);
|
LcdFlags blink = ((s_editMode>0) ? BLINK|INVERS : INVERS);
|
||||||
LcdFlags attr = (sub == k ? blink : 0);
|
LcdFlags attr = (sub == k ? blink : 0);
|
||||||
|
|
||||||
switch(k) {
|
switch (k) {
|
||||||
case ITEM_MODEL_SETUP_NAME:
|
case ITEM_MODEL_SETUP_NAME:
|
||||||
editSingleName(MODEL_SETUP_2ND_COLUMN, y, STR_MODELNAME, g_model.header.name, sizeof(g_model.header.name), event, attr);
|
editSingleName(MODEL_SETUP_2ND_COLUMN, y, STR_MODELNAME, g_model.header.name, sizeof(g_model.header.name), event, attr);
|
||||||
memcpy(modelHeaders[g_eeGeneral.currModel].name, g_model.header.name, sizeof(g_model.header.name));
|
memcpy(modelHeaders[g_eeGeneral.currModel].name, g_model.header.name, sizeof(g_model.header.name));
|
||||||
|
|
|
@ -115,12 +115,7 @@ void menuStatisticsDebug(event_t event)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
switch(event) {
|
switch (event) {
|
||||||
case EVT_ENTRY:
|
|
||||||
case EVT_ENTRY_UP:
|
|
||||||
enableVBatBridge();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case EVT_KEY_LONG(KEY_ENTER):
|
case EVT_KEY_LONG(KEY_ENTER):
|
||||||
g_eeGeneral.globalTimer = 0;
|
g_eeGeneral.globalTimer = 0;
|
||||||
sessionTimer = 0;
|
sessionTimer = 0;
|
||||||
|
|
|
@ -81,11 +81,11 @@ void title(const char * s)
|
||||||
lcdDrawText(0, 0, s, INVERS);
|
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);
|
drawFieldLabel(x, y, label);
|
||||||
if (values) lcdDrawTextAtIndex(x, y, values, value-min, attr);
|
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;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,10 @@ const uint8_t LBM_TOPMENU_TXBATT[] = {
|
||||||
#include "mask_txbat.lbm"
|
#include "mask_txbat.lbm"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const uint8_t LBM_TOPMENU_ANTENNA[] = {
|
||||||
|
#include "mask_antenna.lbm"
|
||||||
|
};
|
||||||
|
|
||||||
const uint8_t LBM_HTRIM_FRAME[] = {
|
const uint8_t LBM_HTRIM_FRAME[] = {
|
||||||
#include "mask_htrim_frame.lbm"
|
#include "mask_htrim_frame.lbm"
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,6 +26,7 @@ extern const uint8_t LBM_DOT[];
|
||||||
|
|
||||||
// Main view icons
|
// Main view icons
|
||||||
extern const uint8_t LBM_TOPMENU_USB[];
|
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_0[];
|
||||||
extern const uint8_t LBM_TOPMENU_VOLUME_1[];
|
extern const uint8_t LBM_TOPMENU_VOLUME_1[];
|
||||||
extern const uint8_t LBM_TOPMENU_VOLUME_2[];
|
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)
|
inline void POPUP_MENU_START(PopupMenuHandler handler)
|
||||||
{
|
{
|
||||||
if (handler != popupMenuHandler) {
|
if (handler != popupMenuHandler) {
|
||||||
|
killAllEvents();
|
||||||
AUDIO_KEY_PRESS();
|
AUDIO_KEY_PRESS();
|
||||||
popupMenuHandler = handler;
|
popupMenuHandler = handler;
|
||||||
}
|
}
|
||||||
|
@ -582,7 +583,10 @@ inline void POPUP_WARNING(const char * s)
|
||||||
popupFunc = runPopupWarning;
|
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;
|
warningText = s;
|
||||||
warningType = WARNING_TYPE_CONFIRM;
|
warningType = WARNING_TYPE_CONFIRM;
|
||||||
|
|
|
@ -219,6 +219,27 @@ bool menuModelWizard(event_t event)
|
||||||
}
|
}
|
||||||
#endif
|
#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)
|
void onModelSelectMenu(const char * result)
|
||||||
{
|
{
|
||||||
if (result == STR_SELECT_MODEL) {
|
if (result == STR_SELECT_MODEL) {
|
||||||
|
@ -233,7 +254,7 @@ void onModelSelectMenu(const char * result)
|
||||||
chainMenu(menuMainView);
|
chainMenu(menuMainView);
|
||||||
}
|
}
|
||||||
else if (result == STR_DELETE_MODEL) {
|
else if (result == STR_DELETE_MODEL) {
|
||||||
POPUP_CONFIRMATION(STR_DELETEMODEL);
|
POPUP_CONFIRMATION(STR_DELETEMODEL, onDeleteModelConfirm);
|
||||||
SET_WARNING_INFO(currentModel->modelName, LEN_MODEL_NAME, 0);
|
SET_WARNING_INFO(currentModel->modelName, LEN_MODEL_NAME, 0);
|
||||||
deleteMode = MODE_DELETE_MODEL;
|
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);
|
SET_WARNING_INFO(STR_CAT_NOT_EMPTY, sizeof(TR_CAT_NOT_EMPTY), 0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
POPUP_CONFIRMATION(STR_DELETEMODEL);
|
POPUP_CONFIRMATION(STR_DELETEMODEL, onDeleteModelConfirm);
|
||||||
SET_WARNING_INFO(currentCategory->name, LEN_MODEL_FILENAME, 0);
|
SET_WARNING_INFO(currentCategory->name, LEN_MODEL_FILENAME, 0);
|
||||||
deleteMode = MODE_DELETE_CATEGORY;
|
deleteMode = MODE_DELETE_CATEGORY;
|
||||||
}
|
}
|
||||||
|
@ -322,26 +343,6 @@ void initModelsList()
|
||||||
|
|
||||||
bool menuModelSelect(event_t event)
|
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();
|
const std::list<ModelsCategory*>& cats = modelslist.getCategories();
|
||||||
switch(event) {
|
switch(event) {
|
||||||
case 0:
|
case 0:
|
||||||
|
|
|
@ -72,7 +72,7 @@ enum MenuModelSetupItems {
|
||||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS,
|
||||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_BIND,
|
||||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM,
|
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,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_ANTENNA,
|
||||||
#endif
|
#endif
|
||||||
ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE,
|
ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE,
|
||||||
|
@ -509,17 +509,22 @@ inline uint8_t EXTERNAL_MODULE_TYPE_ROW()
|
||||||
#define REGISTRATION_ID_ROWS
|
#define REGISTRATION_ID_ROWS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(EXTERNAL_ANTENNA)
|
#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA)
|
||||||
#define ANTENNA_ROW IF_NOT_PXX2_MODULE(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(0)), // Antenna
|
#define EXTERNAL_ANTENNA_ROW ((isModuleXJT(INTERNAL_MODULE) && g_eeGeneral.antennaMode == ANTENNA_MODE_PER_MODEL) ? (uint8_t)0 : HIDDEN_ROW),
|
||||||
void onAntennaSwitchConfirm(const char * result)
|
void onModelAntennaSwitchConfirm(const char * result)
|
||||||
{
|
{
|
||||||
if (result == STR_OK) {
|
if (result == STR_OK) {
|
||||||
// Switch to external antenna confirmation
|
// 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
|
#else
|
||||||
#define ANTENNA_ROW
|
#define EXTERNAL_ANTENNA_ROW
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool menuModelSetup(event_t event)
|
bool menuModelSetup(event_t event)
|
||||||
|
@ -559,7 +564,7 @@ bool menuModelSetup(event_t event)
|
||||||
INTERNAL_MODULE_CHANNELS_ROWS,
|
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_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
|
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // RxNum
|
||||||
ANTENNA_ROW
|
EXTERNAL_ANTENNA_ROW
|
||||||
IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)),
|
IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)),
|
||||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 1), /* Range check and Register buttons */ \
|
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 1), /* Range check and Register buttons */ \
|
||||||
IF_PXX2_MODULE(INTERNAL_MODULE, 0), /* Module options */ \
|
IF_PXX2_MODULE(INTERNAL_MODULE, 0), /* Module options */ \
|
||||||
|
@ -586,8 +591,12 @@ bool menuModelSetup(event_t event)
|
||||||
TRAINER_ROWS
|
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;
|
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) {
|
if (menuEvent) {
|
||||||
|
@ -597,10 +606,10 @@ bool menuModelSetup(event_t event)
|
||||||
|
|
||||||
int sub = menuVerticalPosition;
|
int sub = menuVerticalPosition;
|
||||||
|
|
||||||
for (uint8_t i=0; i<NUM_BODY_LINES; ++i) {
|
for (uint8_t i = 0; i < NUM_BODY_LINES; ++i) {
|
||||||
coord_t y = MENU_CONTENT_TOP + i*FH;
|
coord_t y = MENU_CONTENT_TOP + i*FH;
|
||||||
uint8_t k = i + menuVerticalOffset;
|
uint8_t k = i + menuVerticalOffset;
|
||||||
for (int j=0; j<=k; j++) {
|
for (int j = 0; j <= k; j++) {
|
||||||
if (mstate_tab[j] == HIDDEN_ROW)
|
if (mstate_tab[j] == HIDDEN_ROW)
|
||||||
k++;
|
k++;
|
||||||
}
|
}
|
||||||
|
@ -608,7 +617,7 @@ bool menuModelSetup(event_t event)
|
||||||
LcdFlags blink = ((s_editMode>0) ? BLINK|INVERS : INVERS);
|
LcdFlags blink = ((s_editMode>0) ? BLINK|INVERS : INVERS);
|
||||||
LcdFlags attr = (sub == k ? blink : 0);
|
LcdFlags attr = (sub == k ? blink : 0);
|
||||||
|
|
||||||
switch(k) {
|
switch (k) {
|
||||||
case ITEM_MODEL_SETUP_NAME:
|
case ITEM_MODEL_SETUP_NAME:
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MODELNAME);
|
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MODELNAME);
|
||||||
editName(MODEL_SETUP_2ND_COLUMN, y, g_model.header.name, sizeof(g_model.header.name), event, attr);
|
editName(MODEL_SETUP_2ND_COLUMN, y, g_model.header.name, sizeof(g_model.header.name), event, attr);
|
||||||
|
@ -968,21 +977,21 @@ bool menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if defined(EXTERNAL_ANTENNA)
|
#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA)
|
||||||
case ITEM_MODEL_SETUP_INTERNAL_MODULE_ANTENNA:
|
case ITEM_MODEL_SETUP_INTERNAL_MODULE_ANTENNA:
|
||||||
{
|
lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, STR_ANTENNA);
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_ANTENNASELECTION);
|
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; });
|
||||||
uint8_t newAntennaSel = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_VANTENNATYPES, g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna, 0, 1, attr, event);
|
if (event && !s_editMode && reusableBuffer.moduleSetup.antennaMode != g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode) {
|
||||||
if (newAntennaSel != g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna && newAntennaSel == XJT_EXTERNAL_ANTENNA) {
|
if (reusableBuffer.moduleSetup.antennaMode == ANTENNA_MODE_EXTERNAL && !isExternalAntennaEnabled()) {
|
||||||
POPUP_CONFIRMATION(STR_ANTENNACONFIRM1, onAntennaSwitchConfirm);
|
POPUP_CONFIRMATION(STR_ANTENNACONFIRM1, onModelAntennaSwitchConfirm);
|
||||||
const char * w = STR_ANTENNACONFIRM2;
|
SET_WARNING_INFO(STR_ANTENNACONFIRM2, sizeof(TR_ANTENNACONFIRM2), 0);
|
||||||
SET_WARNING_INFO(w, strlen(w), 0);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna = newAntennaSel;
|
g_model.moduleData[INTERNAL_MODULE].pxx.antennaMode = reusableBuffer.moduleSetup.antennaMode;
|
||||||
|
checkExternalAntenna();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL:
|
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL:
|
||||||
|
|
|
@ -58,9 +58,15 @@ enum MenuRadioHardwareItems {
|
||||||
ITEM_RADIO_HARDWARE_BLUETOOTH_MODE,
|
ITEM_RADIO_HARDWARE_BLUETOOTH_MODE,
|
||||||
ITEM_RADIO_HARDWARE_BLUETOOTH_PAIRING_CODE,
|
ITEM_RADIO_HARDWARE_BLUETOOTH_PAIRING_CODE,
|
||||||
ITEM_RADIO_HARDWARE_BLUETOOTH_NAME,
|
ITEM_RADIO_HARDWARE_BLUETOOTH_NAME,
|
||||||
|
|
||||||
|
#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA)
|
||||||
|
ITEM_RADIO_HARDWARE_EXTERNAL_ANTENNA,
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(AUX_SERIAL)
|
#if defined(AUX_SERIAL)
|
||||||
ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE,
|
ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ITEM_RADIO_HARDWARE_JITTER_FILTER,
|
ITEM_RADIO_HARDWARE_JITTER_FILTER,
|
||||||
ITEM_RADIO_HARDWARE_MAX
|
ITEM_RADIO_HARDWARE_MAX
|
||||||
};
|
};
|
||||||
|
@ -76,6 +82,23 @@ enum MenuRadioHardwareItems {
|
||||||
// TODO should be moved to the HAL
|
// 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)
|
#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)
|
bool menuRadioHardware(event_t event)
|
||||||
{
|
{
|
||||||
MENU(STR_HARDWARE, RADIO_ICONS, menuTabGeneral, MENU_RADIO_HARDWARE, ITEM_RADIO_HARDWARE_MAX, {
|
MENU(STR_HARDWARE, RADIO_ICONS, menuTabGeneral, MENU_RADIO_HARDWARE, ITEM_RADIO_HARDWARE_MAX, {
|
||||||
|
@ -100,10 +123,22 @@ bool menuRadioHardware(event_t event)
|
||||||
|
|
||||||
BLUETOOTH_ROWS,
|
BLUETOOTH_ROWS,
|
||||||
|
|
||||||
|
EXTERNAL_ANTENNA_ROW
|
||||||
|
|
||||||
0, /* aux serial mode */
|
0, /* aux serial mode */
|
||||||
0, /* ADC filter */
|
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;
|
uint8_t sub = menuVerticalPosition;
|
||||||
|
|
||||||
for (int i=0; i<NUM_BODY_LINES; ++i) {
|
for (int i=0; i<NUM_BODY_LINES; ++i) {
|
||||||
|
@ -242,15 +277,32 @@ bool menuRadioHardware(event_t event)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_RADIO_HARDWARE_BLUETOOTH_PAIRING_CODE:
|
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);
|
lcdDrawText(HW_SETTINGS_COLUMN+50, y, "000000", 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ITEM_RADIO_HARDWARE_BLUETOOTH_NAME:
|
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);
|
editName(HW_SETTINGS_COLUMN+50, y, g_eeGeneral.bluetoothName, LEN_BLUETOOTH_NAME, event, attr);
|
||||||
break;
|
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)
|
#if defined(AUX_SERIAL)
|
||||||
case ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE:
|
case ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE:
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_AUX_SERIAL_MODE);
|
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_AUX_SERIAL_MODE);
|
||||||
|
@ -264,7 +316,7 @@ bool menuRadioHardware(event_t event)
|
||||||
case ITEM_RADIO_HARDWARE_JITTER_FILTER:
|
case ITEM_RADIO_HARDWARE_JITTER_FILTER:
|
||||||
{
|
{
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_JITTER_FILTER);
|
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_JITTER_FILTER);
|
||||||
uint8_t b = 1-g_eeGeneral.jitterFilter;
|
uint8_t b = 1 - g_eeGeneral.jitterFilter;
|
||||||
g_eeGeneral.jitterFilter = 1 - editCheckBox(b, HW_SETTINGS_COLUMN+50, y, attr, event);
|
g_eeGeneral.jitterFilter = 1 - editCheckBox(b, HW_SETTINGS_COLUMN+50, y, attr, event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,19 @@ void getSelectionFullPath(char * lfn)
|
||||||
strcat(lfn, reusableBuffer.sdManager.lines[menuVerticalPosition - menuVerticalOffset]);
|
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)
|
void onSdManagerMenu(const char * result)
|
||||||
{
|
{
|
||||||
TCHAR lfn[_MAX_LFN+1];
|
TCHAR lfn[_MAX_LFN+1];
|
||||||
|
@ -85,7 +98,7 @@ void onSdManagerMenu(const char * result)
|
||||||
pushMenu(menuRadioSdManagerInfo);
|
pushMenu(menuRadioSdManagerInfo);
|
||||||
}
|
}
|
||||||
else if (result == STR_SD_FORMAT) {
|
else if (result == STR_SD_FORMAT) {
|
||||||
POPUP_CONFIRMATION(STR_CONFIRM_FORMAT);
|
POPUP_CONFIRMATION(STR_CONFIRM_FORMAT, onSdFormatConfirm);
|
||||||
}
|
}
|
||||||
else if (result == STR_COPY_FILE) {
|
else if (result == STR_COPY_FILE) {
|
||||||
clipboard.type = CLIPBOARD_TYPE_SD_FILE;
|
clipboard.type = CLIPBOARD_TYPE_SD_FILE;
|
||||||
|
@ -165,17 +178,6 @@ void onSdManagerMenu(const char * result)
|
||||||
|
|
||||||
bool menuRadioSdManager(event_t _event)
|
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);
|
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);
|
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;
|
uint8_t index = 0;
|
||||||
|
|
||||||
#if defined(PXX2)
|
#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);
|
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);
|
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);
|
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);
|
addRadioModuleTool(index++, STR_POWER_METER_EXT, menuRadioPowerMeter, EXTERNAL_MODULE);
|
||||||
#endif
|
#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);
|
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 */
|
/* Audio volume */
|
||||||
lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_SCALE, MENU_TITLE_DISABLE_COLOR);
|
lcdDrawBitmapPattern(LCD_W-130, 4, LBM_TOPMENU_VOLUME_SCALE, MENU_TITLE_DISABLE_COLOR);
|
||||||
if (requiredSpeakerVolume == 0 || g_eeGeneral.beepMode == e_mode_quiet)
|
if (requiredSpeakerVolume == 0 || g_eeGeneral.beepMode == e_mode_quiet)
|
||||||
|
|
|
@ -98,7 +98,6 @@ bool menuStatsDebug(event_t event)
|
||||||
switch(event) {
|
switch(event) {
|
||||||
case EVT_ENTRY:
|
case EVT_ENTRY:
|
||||||
case EVT_ENTRY_UP:
|
case EVT_ENTRY_UP:
|
||||||
enableVBatBridge();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EVT_KEY_FIRST(KEY_ENTER):
|
case EVT_KEY_FIRST(KEY_ENTER):
|
||||||
|
|
|
@ -58,7 +58,7 @@ class Widget
|
||||||
|
|
||||||
virtual const char * getErrorMessage() const
|
virtual const char * getErrorMessage() const
|
||||||
{
|
{
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline ZoneOptionValue * getOptionValue(unsigned int index) const
|
inline ZoneOptionValue * getOptionValue(unsigned int index) const
|
||||||
|
@ -83,7 +83,7 @@ void registerWidget(const WidgetFactory * factory);
|
||||||
class WidgetFactory
|
class WidgetFactory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
WidgetFactory(const char * name, const ZoneOption * options=NULL):
|
WidgetFactory(const char * name, const ZoneOption * options=nullptr):
|
||||||
name(name),
|
name(name),
|
||||||
options(options)
|
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);
|
if (values) lcdDrawTextAtIndex(x, y, values, value-min, attr);
|
||||||
return value;
|
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 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);
|
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);
|
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);
|
swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags attr, event_t event);
|
||||||
void drawFatalErrorScreen(const char * message);
|
void drawFatalErrorScreen(const char * message);
|
||||||
|
|
|
@ -24,26 +24,26 @@ void onBindMenu(const char * result)
|
||||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition - HEADER_LINE);
|
uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition - HEADER_LINE);
|
||||||
|
|
||||||
if (result == STR_BINDING_1_8_TELEM_ON) {
|
if (result == STR_BINDING_1_8_TELEM_ON) {
|
||||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
|
g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = false;
|
||||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = false;
|
||||||
if (isModuleR9MLiteNonPro(moduleIdx) && isModuleR9M_LBT(moduleIdx)) {
|
if (isModuleR9MLiteNonPro(moduleIdx) && isModuleR9M_LBT(moduleIdx)) {
|
||||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LITE_LBT_POWER_25_8CH;
|
g_model.moduleData[moduleIdx].pxx.power = R9M_LITE_LBT_POWER_25_8CH;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (result == STR_BINDING_1_8_TELEM_OFF) {
|
else if (result == STR_BINDING_1_8_TELEM_OFF) {
|
||||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = true;
|
||||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = false;
|
||||||
if (isModuleR9MLiteNonPro(moduleIdx) && isModuleR9M_LBT(moduleIdx)) {
|
if (isModuleR9MLiteNonPro(moduleIdx) && isModuleR9M_LBT(moduleIdx)) {
|
||||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LITE_LBT_POWER_100_16CH_NOTELEM;
|
g_model.moduleData[moduleIdx].pxx.power = R9M_LITE_LBT_POWER_100_16CH_NOTELEM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (result == STR_BINDING_9_16_TELEM_ON) {
|
else if (result == STR_BINDING_9_16_TELEM_ON) {
|
||||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
|
g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = false;
|
||||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true;
|
g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = true;
|
||||||
}
|
}
|
||||||
else if (result == STR_BINDING_9_16_TELEM_OFF) {
|
else if (result == STR_BINDING_9_16_TELEM_OFF) {
|
||||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff = true;
|
||||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true;
|
g_model.moduleData[moduleIdx].pxx.receiverHigherChannels = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return;
|
return;
|
||||||
|
@ -66,13 +66,13 @@ void startBindMenu(uint8_t moduleIdx)
|
||||||
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF);
|
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;
|
selection += 1;
|
||||||
if (isTelemAllowedOnBind(moduleIdx))
|
if (isTelemAllowedOnBind(moduleIdx))
|
||||||
selection += 1;
|
selection += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isTelemAllowedOnBind(moduleIdx) && g_model.moduleData[moduleIdx].pxx.receiver_telem_off)
|
if (isTelemAllowedOnBind(moduleIdx) && g_model.moduleData[moduleIdx].pxx.receiverTelemetryOff)
|
||||||
selection += 1;
|
selection += 1;
|
||||||
|
|
||||||
POPUP_MENU_SELECT_ITEM(selection);
|
POPUP_MENU_SELECT_ITEM(selection);
|
||||||
|
|
|
@ -107,12 +107,15 @@ enum
|
||||||
|
|
||||||
inline void POPUP_CONFIRMATION(const char * s, PopupMenuHandler handler)
|
inline void POPUP_CONFIRMATION(const char * s, PopupMenuHandler handler)
|
||||||
{
|
{
|
||||||
|
if (s != warningText) {
|
||||||
|
killAllEvents();
|
||||||
warningText = s;
|
warningText = s;
|
||||||
warningInfoText = nullptr;
|
warningInfoText = nullptr;
|
||||||
warningType = WARNING_TYPE_CONFIRM;
|
warningType = WARNING_TYPE_CONFIRM;
|
||||||
popupFunc = runPopupWarning;
|
popupFunc = runPopupWarning;
|
||||||
popupMenuHandler = handler;
|
popupMenuHandler = handler;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inline void POPUP_INPUT(const char * s, PopupFunc func)
|
inline void POPUP_INPUT(const char * s, PopupFunc func)
|
||||||
{
|
{
|
||||||
|
@ -144,8 +147,9 @@ enum
|
||||||
inline void POPUP_MENU_ADD_ITEM(const char * s)
|
inline void POPUP_MENU_ADD_ITEM(const char * s)
|
||||||
{
|
{
|
||||||
popupMenuOffsetType = MENU_OFFSET_INTERNAL;
|
popupMenuOffsetType = MENU_OFFSET_INTERNAL;
|
||||||
if (popupMenuItemsCount < POPUP_MENU_MAX_LINES)
|
if (popupMenuItemsCount < POPUP_MENU_MAX_LINES) {
|
||||||
popupMenuItems[popupMenuItemsCount++] = s;
|
popupMenuItems[popupMenuItemsCount++] = s;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SDCARD)
|
#if defined(SDCARD)
|
||||||
|
@ -162,6 +166,7 @@ inline void POPUP_MENU_SELECT_ITEM(uint8_t index)
|
||||||
inline void POPUP_MENU_START(PopupMenuHandler handler)
|
inline void POPUP_MENU_START(PopupMenuHandler handler)
|
||||||
{
|
{
|
||||||
if (handler != popupMenuHandler) {
|
if (handler != popupMenuHandler) {
|
||||||
|
killAllEvents();
|
||||||
AUDIO_KEY_PRESS();
|
AUDIO_KEY_PRESS();
|
||||||
popupMenuHandler = handler;
|
popupMenuHandler = handler;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "opentx.h"
|
#include <opentx.h>
|
||||||
|
|
||||||
#if defined(PCBSKY9X)
|
#if defined(PCBSKY9X)
|
||||||
#define HW_SETTINGS_COLUMN (2+(15*FW))
|
#define HW_SETTINGS_COLUMN (2+(15*FW))
|
||||||
|
@ -169,6 +169,10 @@ enum {
|
||||||
ITEM_RADIO_HARDWARE_BLUETOOTH_NAME,
|
ITEM_RADIO_HARDWARE_BLUETOOTH_NAME,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(INTERNAL_MODULE_PXX1) && defined(EXTERNAL_ANTENNA)
|
||||||
|
ITEM_RADIO_HARDWARE_EXTERNAL_ANTENNA,
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(AUX_SERIAL)
|
#if defined(AUX_SERIAL)
|
||||||
ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE,
|
ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE,
|
||||||
#endif
|
#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),
|
#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
|
#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)
|
#if defined(PCBX9LITE)
|
||||||
#define SWITCH_TYPE_MAX(sw) (sw == MIXSRC_SD-MIXSRC_FIRST_SWITCH ? SWITCH_2POS : SWITCH_3POS)
|
#define SWITCH_TYPE_MAX(sw) (sw == MIXSRC_SD-MIXSRC_FIRST_SWITCH ? SWITCH_2POS : SWITCH_3POS)
|
||||||
#elif defined(PCBXLITES)
|
#elif defined(PCBXLITES)
|
||||||
|
@ -298,6 +319,8 @@ void menuRadioHardware(event_t event)
|
||||||
|
|
||||||
BLUETOOTH_ROWS
|
BLUETOOTH_ROWS
|
||||||
|
|
||||||
|
EXTERNAL_ANTENNA_ROW
|
||||||
|
|
||||||
AUX_SERIAL_ROWS
|
AUX_SERIAL_ROWS
|
||||||
|
|
||||||
0 /* ADC filter */,
|
0 /* ADC filter */,
|
||||||
|
@ -324,6 +347,9 @@ void menuRadioHardware(event_t event)
|
||||||
}
|
}
|
||||||
else if (event == EVT_ENTRY) {
|
else if (event == EVT_ENTRY) {
|
||||||
enableVBatBridge();
|
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++) {
|
for (uint8_t i=0; i<NUM_BODY_LINES; i++) {
|
||||||
|
@ -546,6 +572,22 @@ void menuRadioHardware(event_t event)
|
||||||
break;
|
break;
|
||||||
#endif
|
#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)
|
#if defined(AUX_SERIAL)
|
||||||
case ITEM_RADIO_HARDWARE_AUX_SERIAL_MODE:
|
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);
|
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;
|
uint8_t index = 0;
|
||||||
|
|
||||||
#if defined(PXX2)
|
#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);
|
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);
|
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);
|
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);
|
addRadioModuleTool(index++, STR_POWER_METER_EXT, menuRadioPowerMeter, EXTERNAL_MODULE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -110,7 +110,6 @@ void drawCurve(coord_t offset=0);
|
||||||
|
|
||||||
#if defined(COLORLCD)
|
#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);
|
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);
|
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);
|
swsrc_t editSwitch(coord_t x, coord_t y, swsrc_t value, LcdFlags flags, event_t event);
|
||||||
void drawFatalErrorScreen(const char * message);
|
void drawFatalErrorScreen(const char * message);
|
||||||
|
|
|
@ -314,7 +314,9 @@ void guiMain(event_t evt)
|
||||||
const char * result = runPopupMenu(evt);
|
const char * result = runPopupMenu(evt);
|
||||||
if (result) {
|
if (result) {
|
||||||
TRACE("popupMenuHandler(%s)", result);
|
TRACE("popupMenuHandler(%s)", result);
|
||||||
popupMenuHandler(result);
|
auto handler = popupMenuHandler;
|
||||||
|
popupMenuHandler = nullptr;
|
||||||
|
handler(result);
|
||||||
if (menuEvent == 0) {
|
if (menuEvent == 0) {
|
||||||
evt = EVT_REFRESH;
|
evt = EVT_REFRESH;
|
||||||
continue;
|
continue;
|
||||||
|
@ -453,7 +455,9 @@ void guiMain(event_t evt)
|
||||||
const char * result = runPopupMenu(evt);
|
const char * result = runPopupMenu(evt);
|
||||||
if (result) {
|
if (result) {
|
||||||
TRACE("popupMenuHandler(%s)", 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();
|
START_SILENCE_PERIOD();
|
||||||
}
|
}
|
||||||
#endif // GUI
|
#endif // GUI
|
||||||
|
|
|
@ -568,7 +568,8 @@ void flightReset(uint8_t check=true);
|
||||||
PACK(struct GlobalData {
|
PACK(struct GlobalData {
|
||||||
uint8_t unexpectedShutdown:1;
|
uint8_t unexpectedShutdown:1;
|
||||||
uint8_t sdcardPresent:1;
|
uint8_t sdcardPresent:1;
|
||||||
uint8_t spare:6;
|
uint8_t externalAntennaEnabled: 1;
|
||||||
|
uint8_t spare:5;
|
||||||
});
|
});
|
||||||
|
|
||||||
extern GlobalData globalData;
|
extern GlobalData globalData;
|
||||||
|
@ -1106,6 +1107,7 @@ union ReusableBuffer
|
||||||
struct {
|
struct {
|
||||||
char msg[64];
|
char msg[64];
|
||||||
uint8_t r9mPower;
|
uint8_t r9mPower;
|
||||||
|
int8_t antennaMode;
|
||||||
BindInformation bindInformation;
|
BindInformation bindInformation;
|
||||||
struct {
|
struct {
|
||||||
union {
|
union {
|
||||||
|
@ -1165,13 +1167,17 @@ union ReusableBuffer
|
||||||
uint32_t updateTime;
|
uint32_t updateTime;
|
||||||
ModuleSettings moduleSettings;
|
ModuleSettings moduleSettings;
|
||||||
ReceiverSettings receiverSettings; // when dealing with receiver settings, we also need module settings
|
ReceiverSettings receiverSettings; // when dealing with receiver settings, we also need module settings
|
||||||
} hardwareAndSettings;
|
} hardwareAndSettings; // moduleOptions, receiverOptions, radioVersion
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
ModuleInformation modules[NUM_MODULES];
|
ModuleInformation modules[NUM_MODULES];
|
||||||
uint8_t linesCount;
|
uint8_t linesCount;
|
||||||
} radioTools;
|
} radioTools;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
int8_t antennaMode;
|
||||||
|
} radioHardware;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
uint8_t stickMode;
|
uint8_t stickMode;
|
||||||
} generalSettings;
|
} 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 {
|
enum ModuleType {
|
||||||
MODULE_TYPE_NONE = 0,
|
MODULE_TYPE_NONE = 0,
|
||||||
MODULE_TYPE_PPM,
|
MODULE_TYPE_PPM,
|
||||||
|
@ -164,3 +187,14 @@ enum FailsafeModes {
|
||||||
FAILSAFE_RECEIVER,
|
FAILSAFE_RECEIVER,
|
||||||
FAILSAFE_LAST = 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);
|
setDefaultPpmFrameLength(moduleIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern bool isExternalAntennaEnabled();
|
||||||
|
|
||||||
#endif // _MODULES_HELPERS_H_
|
#endif // _MODULES_HELPERS_H_
|
||||||
|
|
|
@ -52,27 +52,27 @@ template <class PxxTransport>
|
||||||
void Pxx1Pulses<PxxTransport>::addExtraFlags(uint8_t module)
|
void Pxx1Pulses<PxxTransport>::addExtraFlags(uint8_t module)
|
||||||
{
|
{
|
||||||
// Ext. flag (holds antenna selection on Horus internal module, 0x00 otherwise)
|
// 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 defined(EXTERNAL_ANTENNA)
|
||||||
if (module == INTERNAL_MODULE) {
|
if (module == INTERNAL_MODULE && isExternalAntennaEnabled()) {
|
||||||
extra_flags |= (g_model.moduleData[module].pxx.external_antenna << 0);
|
extraFlags |= (1 << 0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extra_flags |= (g_model.moduleData[module].pxx.receiver_telem_off << 1);
|
extraFlags |= (g_model.moduleData[module].pxx.receiverTelemetryOff << 1);
|
||||||
extra_flags |= (g_model.moduleData[module].pxx.receiver_channel_9_16 << 2);
|
extraFlags |= (g_model.moduleData[module].pxx.receiverHigherChannels << 2);
|
||||||
if (isModuleR9MNonAccess(module)) {
|
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))
|
if (isModuleR9M_EUPLUS(module))
|
||||||
extra_flags |= (1 << 6);
|
extraFlags |= (1 << 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disable S.PORT if internal module is active
|
// Disable S.PORT if internal module is active
|
||||||
if (module == EXTERNAL_MODULE && isSportLineUsedByInternalModule()) {
|
if (module == EXTERNAL_MODULE && isSportLineUsedByInternalModule()) {
|
||||||
extra_flags |= (1 << 5);
|
extraFlags |= (1 << 5);
|
||||||
}
|
}
|
||||||
PxxTransport::addByte(extra_flags);
|
PxxTransport::addByte(extraFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class PxxTransport>
|
template <class PxxTransport>
|
||||||
|
|
|
@ -243,7 +243,7 @@ void Pxx2Pulses::setupAccstBindFrame(uint8_t module)
|
||||||
for (uint8_t i=0; i<PXX2_LEN_RX_NAME; i++) {
|
for (uint8_t i=0; i<PXX2_LEN_RX_NAME; i++) {
|
||||||
Pxx2Transport::addByte(0x00);
|
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]);
|
Pxx2Transport::addByte(g_model.header.modelId[module]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -166,8 +166,8 @@ PACK(typedef struct {
|
||||||
struct {
|
struct {
|
||||||
uint8_t power:2; // 0=10 mW, 1=100 mW, 2=500 mW, 3=1W
|
uint8_t power:2; // 0=10 mW, 1=100 mW, 2=500 mW, 3=1W
|
||||||
uint8_t spare1:2;
|
uint8_t spare1:2;
|
||||||
uint8_t receiver_telem_off:1; // false = receiver telem enabled
|
uint8_t receiverTelemetryOff:1; // false = receiver telem enabled
|
||||||
uint8_t receiver_channel_9_16:1; // false = pwm out 1-8, true 9-16
|
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 external_antenna:1; // false = internal antenna, true = external antenna
|
||||||
uint8_t fast:1;
|
uint8_t fast:1;
|
||||||
uint8_t spare2;
|
uint8_t spare2;
|
||||||
|
|
|
@ -176,7 +176,6 @@ const char * eeRestoreModel(uint8_t i_fileDst, char *model_name);
|
||||||
|
|
||||||
// For conversions
|
// For conversions
|
||||||
void loadRadioSettings();
|
void loadRadioSettings();
|
||||||
void loadModel(int index, bool alarms=true);
|
|
||||||
|
|
||||||
bool eepromOpen();
|
bool eepromOpen();
|
||||||
void eeLoadModelName(uint8_t id, char * name);
|
void eeLoadModelName(uint8_t id, char * name);
|
||||||
|
|
|
@ -52,6 +52,7 @@ void storageFlushCurrentModel();
|
||||||
void postRadioSettingsLoad();
|
void postRadioSettingsLoad();
|
||||||
void preModelLoad();
|
void preModelLoad();
|
||||||
void postModelLoad(bool alarms);
|
void postModelLoad(bool alarms);
|
||||||
|
void checkExternalAntenna();
|
||||||
|
|
||||||
#if defined(EEPROM_RLC)
|
#if defined(EEPROM_RLC)
|
||||||
#include "eeprom_common.h"
|
#include "eeprom_common.h"
|
||||||
|
|
|
@ -63,6 +63,56 @@ void postRadioSettingsLoad()
|
||||||
#endif
|
#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)
|
void postModelLoad(bool alarms)
|
||||||
{
|
{
|
||||||
#if defined(PXX2)
|
#if defined(PXX2)
|
||||||
|
@ -122,6 +172,7 @@ void postModelLoad(bool alarms)
|
||||||
|
|
||||||
LOAD_MODEL_BITMAP();
|
LOAD_MODEL_BITMAP();
|
||||||
LUA_LOAD_MODEL_SCRIPTS();
|
LUA_LOAD_MODEL_SCRIPTS();
|
||||||
|
|
||||||
SEND_FAILSAFE_1S();
|
SEND_FAILSAFE_1S();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -214,6 +214,7 @@ set(PULSES_SRC
|
||||||
${PULSES_SRC}
|
${PULSES_SRC}
|
||||||
pulses.cpp
|
pulses.cpp
|
||||||
ppm.cpp
|
ppm.cpp
|
||||||
|
modules_helpers.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(DSM2)
|
if(DSM2)
|
||||||
|
|
|
@ -510,7 +510,7 @@ void backlightEnable(uint8_t dutyCycle = 0);
|
||||||
#else
|
#else
|
||||||
#define BACKLIGHT_LEVEL_MIN 46
|
#define BACKLIGHT_LEVEL_MIN 46
|
||||||
#endif
|
#endif
|
||||||
#define BACKLIGHT_ENABLE() backlightEnable(globalData.unexpectedShutdown ? BACKLIGHT_LEVEL_MAX : BACKLIGHT_LEVEL_MAX-g_eeGeneral.backlightBright)
|
#define BACKLIGHT_ENABLE() backlightEnable(globalData.unexpectedShutdown ? BACKLIGHT_LEVEL_MAX : BACKLIGHT_LEVEL_MAX - g_eeGeneral.backlightBright)
|
||||||
#define BACKLIGHT_DISABLE() backlightEnable(globalData.unexpectedShutdown ? BACKLIGHT_LEVEL_MAX : ((g_eeGeneral.blOffBright == BACKLIGHT_LEVEL_MIN) && (g_eeGeneral.backlightMode != e_backlight_mode_off)) ? 0 : g_eeGeneral.blOffBright)
|
#define BACKLIGHT_DISABLE() backlightEnable(globalData.unexpectedShutdown ? BACKLIGHT_LEVEL_MAX : ((g_eeGeneral.blOffBright == BACKLIGHT_LEVEL_MIN) && (g_eeGeneral.backlightMode != e_backlight_mode_off)) ? 0 : g_eeGeneral.blOffBright)
|
||||||
#define isBacklightEnabled() true
|
#define isBacklightEnabled() true
|
||||||
|
|
||||||
|
|
|
@ -566,6 +566,7 @@
|
||||||
|
|
||||||
// Internal Module
|
// Internal Module
|
||||||
#define HARDWARE_INTERNAL_MODULE
|
#define HARDWARE_INTERNAL_MODULE
|
||||||
|
#define EXTERNAL_ANTENNA
|
||||||
#define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2)
|
#define INTMODULE_RCC_AHB1Periph (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_DMA2)
|
||||||
#define INTMODULE_PWR_GPIO GPIOA
|
#define INTMODULE_PWR_GPIO GPIOA
|
||||||
#define INTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PA.08
|
#define INTMODULE_PWR_GPIO_PIN GPIO_Pin_8 // PA.08
|
||||||
|
|
|
@ -602,7 +602,7 @@ class OpenTxSimulatorFactory: public SimulatorFactory
|
||||||
virtual Board::Type type()
|
virtual Board::Type type()
|
||||||
{
|
{
|
||||||
#if defined(PCBX12S)
|
#if defined(PCBX12S)
|
||||||
return Board::BOARD_X12S;
|
return Board::BOARD_HORUS_X12S;
|
||||||
#elif defined(PCBX10)
|
#elif defined(PCBX10)
|
||||||
return Board::BOARD_X10;
|
return Board::BOARD_X10;
|
||||||
#elif defined(PCBX7)
|
#elif defined(PCBX7)
|
||||||
|
@ -612,7 +612,7 @@ class OpenTxSimulatorFactory: public SimulatorFactory
|
||||||
#elif defined(PCBTARANIS)
|
#elif defined(PCBTARANIS)
|
||||||
return Board::BOARD_TARANIS_X9D;
|
return Board::BOARD_TARANIS_X9D;
|
||||||
#else
|
#else
|
||||||
return Board::BOARD_STOCK;
|
return Board::BOARD_9X_M64;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -145,7 +145,7 @@ elseif(PCB STREQUAL XLITE)
|
||||||
set(HAPTIC YES)
|
set(HAPTIC YES)
|
||||||
set(LUA_EXPORT lua_export_xlite)
|
set(LUA_EXPORT lua_export_xlite)
|
||||||
set(FLAVOUR 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(-DEEPROM_VARIANT=0x2000)
|
||||||
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
|
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
|
||||||
set(PXX2 ON)
|
set(PXX2 ON)
|
||||||
|
@ -165,7 +165,7 @@ elseif(PCB STREQUAL XLITES)
|
||||||
set(HAPTIC YES)
|
set(HAPTIC YES)
|
||||||
set(LUA_EXPORT lua_export_xlites)
|
set(LUA_EXPORT lua_export_xlites)
|
||||||
set(FLAVOUR 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(-DEEPROM_VARIANT=0x1000)
|
||||||
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
|
add_definitions(-DPWR_BUTTON_${PWR_BUTTON})
|
||||||
set(GUI_DIR 128x64)
|
set(GUI_DIR 128x64)
|
||||||
|
|
|
@ -907,6 +907,9 @@
|
||||||
#if !defined(RADIO_T12)
|
#if !defined(RADIO_T12)
|
||||||
#define HARDWARE_INTERNAL_MODULE
|
#define HARDWARE_INTERNAL_MODULE
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(PCBXLITE)
|
||||||
|
#define EXTERNAL_ANTENNA
|
||||||
|
#endif
|
||||||
#if defined(PCBXLITES) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019)
|
#if defined(PCBXLITES) || defined(PCBX9LITE) || (defined(PCBX9DP) && PCBREV >= 2019)
|
||||||
#define INTERNAL_MODULE_PXX2
|
#define INTERNAL_MODULE_PXX2
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -73,11 +73,11 @@ ISTR(VSENSORTYPES);
|
||||||
ISTR(VFORMULAS);
|
ISTR(VFORMULAS);
|
||||||
ISTR(VPREC);
|
ISTR(VPREC);
|
||||||
ISTR(VCELLINDEX);
|
ISTR(VCELLINDEX);
|
||||||
ISTR(VANTENNATYPES);
|
|
||||||
ISTR(AUX_SERIAL_MODES);
|
ISTR(AUX_SERIAL_MODES);
|
||||||
ISTR(SWTYPES);
|
ISTR(SWTYPES);
|
||||||
ISTR(POTTYPES);
|
ISTR(POTTYPES);
|
||||||
ISTR(SLIDERTYPES);
|
ISTR(SLIDERTYPES);
|
||||||
|
ISTR(ANTENNA_MODES);
|
||||||
|
|
||||||
#if defined(PCBSKY9X) && defined(REVX)
|
#if defined(PCBSKY9X) && defined(REVX)
|
||||||
ISTR(VOUTPUT_TYPE);
|
ISTR(VOUTPUT_TYPE);
|
||||||
|
@ -139,6 +139,7 @@ const char STR_CURVE[] = TR_CURVE;
|
||||||
const char STR_FLMODE[] = TR_FLMODE;
|
const char STR_FLMODE[] = TR_FLMODE;
|
||||||
const char STR_MIXWARNING[] = TR_MIXWARNING;
|
const char STR_MIXWARNING[] = TR_MIXWARNING;
|
||||||
const char STR_OFF[] = TR_OFF;
|
const char STR_OFF[] = TR_OFF;
|
||||||
|
const char STR_ANTENNA[] = TR_ANTENNA;
|
||||||
const char STR_NO_INFORMATION[] = TR_NO_INFORMATION;
|
const char STR_NO_INFORMATION[] = TR_NO_INFORMATION;
|
||||||
const char STR_MULTPX[] = TR_MULTPX;
|
const char STR_MULTPX[] = TR_MULTPX;
|
||||||
const char STR_DELAYDOWN[] = TR_DELAYDOWN;
|
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_ON[] = TR_BINDING_CH9_16_TELEM_ON;
|
||||||
const char STR_BINDING_9_16_TELEM_OFF[] = TR_BINDING_CH9_16_TELEM_OFF;
|
const char STR_BINDING_9_16_TELEM_OFF[] = TR_BINDING_CH9_16_TELEM_OFF;
|
||||||
const char STR_CHANNELRANGE[] = TR_CHANNELRANGE;
|
const char STR_CHANNELRANGE[] = TR_CHANNELRANGE;
|
||||||
const char STR_ANTENNASELECTION[] = TR_ANTENNASELECTION;
|
|
||||||
const char STR_ANTENNACONFIRM1[] = TR_ANTENNACONFIRM1;
|
const char STR_ANTENNACONFIRM1[] = TR_ANTENNACONFIRM1;
|
||||||
const char STR_ANTENNACONFIRM2[] = TR_ANTENNACONFIRM2;
|
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_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_FCC_WARN_LINE1[] = TR_MODULE_PROTOCOL_FCC_WARN_LINE1;
|
||||||
const char STR_MODULE_PROTOCOL_EU_WARN_LINE1[] = TR_MODULE_PROTOCOL_EU_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_VFORMULAS[];
|
||||||
extern const char STR_VPREC[];
|
extern const char STR_VPREC[];
|
||||||
extern const char STR_VCELLINDEX[];
|
extern const char STR_VCELLINDEX[];
|
||||||
extern const char STR_VANTENNATYPES[];
|
|
||||||
|
|
||||||
#if defined(BLUETOOTH)
|
#if defined(BLUETOOTH)
|
||||||
extern const char STR_BLUETOOTH[];
|
extern const char STR_BLUETOOTH[];
|
||||||
|
@ -249,6 +248,7 @@ extern const char STR_CURVE[];
|
||||||
extern const char STR_FLMODE[];
|
extern const char STR_FLMODE[];
|
||||||
extern const char STR_MIXWARNING[];
|
extern const char STR_MIXWARNING[];
|
||||||
extern const char STR_OFF[];
|
extern const char STR_OFF[];
|
||||||
|
extern const char STR_ANTENNA[];
|
||||||
extern const char STR_NO_INFORMATION[];
|
extern const char STR_NO_INFORMATION[];
|
||||||
extern const char STR_MULTPX[];
|
extern const char STR_MULTPX[];
|
||||||
extern const char STR_DELAYDOWN[];
|
extern const char STR_DELAYDOWN[];
|
||||||
|
@ -732,6 +732,9 @@ extern const char STR_CHANNELRANGE[];
|
||||||
extern const char STR_ANTENNASELECTION[];
|
extern const char STR_ANTENNASELECTION[];
|
||||||
extern const char STR_ANTENNACONFIRM1[];
|
extern const char STR_ANTENNACONFIRM1[];
|
||||||
extern const char STR_ANTENNACONFIRM2[];
|
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_FLEX_WARN_LINE1[];
|
||||||
extern const char STR_MODULE_PROTOCOL_FCC_WARN_LINE1[];
|
extern const char STR_MODULE_PROTOCOL_FCC_WARN_LINE1[];
|
||||||
extern const char STR_MODULE_PROTOCOL_EU_WARN_LINE1[];
|
extern const char STR_MODULE_PROTOCOL_EU_WARN_LINE1[];
|
||||||
|
|
|
@ -374,14 +374,6 @@
|
||||||
#define LEN_VCELLINDEX "\007"
|
#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"
|
#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 LEN_GYROS "\004"
|
||||||
#define TR_GYROS "GyrX""GyrY"
|
#define TR_GYROS "GyrX""GyrY"
|
||||||
|
|
||||||
|
@ -482,6 +474,7 @@
|
||||||
#define TR_FLMODE "Režim"
|
#define TR_FLMODE "Režim"
|
||||||
#define TR_MIXWARNING "Varování"
|
#define TR_MIXWARNING "Varování"
|
||||||
#define TR_OFF "VYP"
|
#define TR_OFF "VYP"
|
||||||
|
#define TR_ANTENNA "Antenna"
|
||||||
#define TR_NO_INFORMATION TR("Není info.", "Žádná informace")
|
#define TR_NO_INFORMATION TR("Není info.", "Žádná informace")
|
||||||
#define TR_MULTPX TR("Mat.operace", "Operace")
|
#define TR_MULTPX TR("Mat.operace", "Operace")
|
||||||
#define TR_DELAYDOWN TR3("Zpoždění Vyp", "Zdržet(x)", "Zpoždění Vyp")
|
#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_UNIT "Jednotky"
|
||||||
#define TR_TELEMETRY_NEWSENSOR INDENT "Přidat senzor ručně"
|
#define TR_TELEMETRY_NEWSENSOR INDENT "Přidat senzor ručně"
|
||||||
#define TR_CHANNELRANGE TR(INDENT "Kanály", INDENT "Rozsah kanálů")
|
#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?"
|
#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_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_FLEX_WARN_LINE1 "Vyžaduje FLEX"
|
||||||
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Vyžaduje FCC"
|
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Vyžaduje FCC"
|
||||||
|
|
|
@ -377,14 +377,6 @@
|
||||||
#define LEN_VCELLINDEX "\012" // "\007" ursprünglich
|
#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"
|
#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 LEN_GYROS "\004"
|
||||||
#define TR_GYROS "GyrX""GyrY"
|
#define TR_GYROS "GyrX""GyrY"
|
||||||
|
|
||||||
|
@ -484,6 +476,7 @@
|
||||||
#define TR_FLMODE TR("Phase", "Phasen")
|
#define TR_FLMODE TR("Phase", "Phasen")
|
||||||
#define TR_MIXWARNING "Warnung"
|
#define TR_MIXWARNING "Warnung"
|
||||||
#define TR_OFF "AUS"
|
#define TR_OFF "AUS"
|
||||||
|
#define TR_ANTENNA "Antenna"
|
||||||
#define TR_NO_INFORMATION TR("No info", "No information")
|
#define TR_NO_INFORMATION TR("No info", "No information")
|
||||||
#define TR_MULTPX "Wirkung"
|
#define TR_MULTPX "Wirkung"
|
||||||
#define TR_DELAYDOWN "Verz. Dn"
|
#define TR_DELAYDOWN "Verz. Dn"
|
||||||
|
@ -932,8 +925,16 @@
|
||||||
#define TR_UNIT "Einheit"
|
#define TR_UNIT "Einheit"
|
||||||
#define TR_TELEMETRY_NEWSENSOR INDENT "Sensor hinzufügen ..."
|
#define TR_TELEMETRY_NEWSENSOR INDENT "Sensor hinzufügen ..."
|
||||||
#define TR_CHANNELRANGE TR(INDENT "Kanäle", INDENT "Ausgangs Kanäle") //wg 9XR-Pro
|
#define TR_CHANNELRANGE TR(INDENT "Kanäle", INDENT "Ausgangs Kanäle") //wg 9XR-Pro
|
||||||
#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenne auswählen")
|
|
||||||
#define TR_ANTENNACONFIRM1 "Ant. umschalten"
|
#define TR_ANTENNACONFIRM1 "Ant. umschalten"
|
||||||
|
#if defined(PCBX12S)
|
||||||
|
#define LEN_ANTENNA_MODES "\023"
|
||||||
|
#define TR_ANTENNA_MODES "Internal\0 ""Ask\0 ""Per model\0 ""Internal + External"
|
||||||
|
#else
|
||||||
|
#define LEN_ANTENNA_MODES "\011"
|
||||||
|
#define TR_ANTENNA_MODES "Internal\0""Ask\0 ""Per model""External"
|
||||||
|
#endif
|
||||||
|
#define TR_USE_INTERNAL_ANTENNA TR("Use int. antenna", "Use internal antenna")
|
||||||
|
#define TR_USE_EXTERNAL_ANTENNA TR("Use ext. antenna", "Use external antenna")
|
||||||
#define TR_ANTENNACONFIRM2 TR("Check antenna", "Ist eine externe Antenne installiert?")
|
#define TR_ANTENNACONFIRM2 TR("Check antenna", "Ist eine externe Antenne installiert?")
|
||||||
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
||||||
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
||||||
|
|
|
@ -377,14 +377,6 @@
|
||||||
#define LEN_VCELLINDEX "\007"
|
#define LEN_VCELLINDEX "\007"
|
||||||
#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0"
|
#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 LEN_GYROS "\004"
|
||||||
#define TR_GYROS "GyrX""GyrY"
|
#define TR_GYROS "GyrX""GyrY"
|
||||||
|
|
||||||
|
@ -484,6 +476,7 @@
|
||||||
#define TR_FLMODE TR("Mode", "Modes")
|
#define TR_FLMODE TR("Mode", "Modes")
|
||||||
#define TR_MIXWARNING "Warning"
|
#define TR_MIXWARNING "Warning"
|
||||||
#define TR_OFF "OFF"
|
#define TR_OFF "OFF"
|
||||||
|
#define TR_ANTENNA "Antenna"
|
||||||
#define TR_NO_INFORMATION TR("No info", "No information")
|
#define TR_NO_INFORMATION TR("No info", "No information")
|
||||||
#define TR_MULTPX "Multiplex"
|
#define TR_MULTPX "Multiplex"
|
||||||
#define TR_DELAYDOWN "Delay dn"
|
#define TR_DELAYDOWN "Delay dn"
|
||||||
|
@ -805,6 +798,7 @@
|
||||||
#else
|
#else
|
||||||
#define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0"
|
#define TR_BLUETOOTH_MODES "---\0 ""Telemetry""Trainer\0"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define TR_SD_INFO_TITLE "SD INFO"
|
#define TR_SD_INFO_TITLE "SD INFO"
|
||||||
#define TR_SD_TYPE "Type:"
|
#define TR_SD_TYPE "Type:"
|
||||||
#define TR_SD_SPEED "Speed:"
|
#define TR_SD_SPEED "Speed:"
|
||||||
|
@ -932,8 +926,16 @@
|
||||||
#define TR_UNIT "Unit"
|
#define TR_UNIT "Unit"
|
||||||
#define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..."
|
#define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..."
|
||||||
#define TR_CHANNELRANGE TR(INDENT "Ch. Range", INDENT "Channel Range")
|
#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 "EXT. ANTENNA"
|
||||||
#define TR_ANTENNACONFIRM1 "Really switch?"
|
#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_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!")
|
||||||
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires FLEX non"
|
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires FLEX non"
|
||||||
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
||||||
|
|
|
@ -392,14 +392,6 @@
|
||||||
#define LEN_VCELLINDEX "\007"
|
#define LEN_VCELLINDEX "\007"
|
||||||
#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0"
|
#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 LEN_GYROS "\004"
|
||||||
#define TR_GYROS "GyrX""GyrY"
|
#define TR_GYROS "GyrX""GyrY"
|
||||||
|
|
||||||
|
@ -504,6 +496,7 @@
|
||||||
#define TR_FLMODE TR("Modo","Modos")
|
#define TR_FLMODE TR("Modo","Modos")
|
||||||
#define TR_MIXWARNING "Aviso"
|
#define TR_MIXWARNING "Aviso"
|
||||||
#define TR_OFF "OFF"
|
#define TR_OFF "OFF"
|
||||||
|
#define TR_ANTENNA "Antenna"
|
||||||
#define TR_NO_INFORMATION TR("No info", "No information")
|
#define TR_NO_INFORMATION TR("No info", "No information")
|
||||||
#define TR_MULTPX "Multpx"
|
#define TR_MULTPX "Multpx"
|
||||||
#define TR_DELAYDOWN "Delay Dn"
|
#define TR_DELAYDOWN "Delay Dn"
|
||||||
|
@ -952,8 +945,16 @@
|
||||||
#define TR_UNIT "Unit"
|
#define TR_UNIT "Unit"
|
||||||
#define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..."
|
#define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..."
|
||||||
#define TR_CHANNELRANGE INDENT "Gama de canales"
|
#define TR_CHANNELRANGE INDENT "Gama de canales"
|
||||||
#define TR_ANTENNASELECTION TR(INDENT "Antenna", TR(INDENT "Antenna", INDENT "Antenna selection"))
|
#define TR_ANTENNACONFIRM1 "EXT. ANTENNA"
|
||||||
#define TR_ANTENNACONFIRM1 "Really switch?"
|
#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_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!")
|
||||||
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
||||||
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
||||||
|
|
|
@ -392,14 +392,6 @@
|
||||||
#define LEN_VCELLINDEX "\007"
|
#define LEN_VCELLINDEX "\007"
|
||||||
#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0"
|
#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 LEN_GYROS "\004"
|
||||||
#define TR_GYROS "GyrX""GyrY"
|
#define TR_GYROS "GyrX""GyrY"
|
||||||
|
|
||||||
|
@ -496,6 +488,7 @@
|
||||||
#define TR_FLMODE TR("Mode","Modes")
|
#define TR_FLMODE TR("Mode","Modes")
|
||||||
#define TR_MIXWARNING "Warning"
|
#define TR_MIXWARNING "Warning"
|
||||||
#define TR_OFF "OFF"
|
#define TR_OFF "OFF"
|
||||||
|
#define TR_ANTENNA "Antenna"
|
||||||
#define TR_NO_INFORMATION TR("No info", "No information")
|
#define TR_NO_INFORMATION TR("No info", "No information")
|
||||||
#define TR_MULTPX "Multpx"
|
#define TR_MULTPX "Multpx"
|
||||||
#define TR_DELAYDOWN "Delay Dn"
|
#define TR_DELAYDOWN "Delay Dn"
|
||||||
|
@ -945,8 +938,16 @@
|
||||||
#define TR_UNIT "Unit"
|
#define TR_UNIT "Unit"
|
||||||
#define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..."
|
#define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..."
|
||||||
#define TR_CHANNELRANGE INDENT "Channel Range"
|
#define TR_CHANNELRANGE INDENT "Channel Range"
|
||||||
#define TR_ANTENNASELECTION TR(INDENT "Antenna", TR(INDENT "Antenna", INDENT "Antenna selection"))
|
#define TR_ANTENNACONFIRM1 "EXT. ANTENNA"
|
||||||
#define TR_ANTENNACONFIRM1 "Really switch?"
|
#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_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!")
|
||||||
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
||||||
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
||||||
|
|
|
@ -394,14 +394,6 @@
|
||||||
#define LEN_VCELLINDEX "\007"
|
#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 "
|
#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 LEN_GYROS "\004"
|
||||||
#define TR_GYROS "GyrX""GyrY"
|
#define TR_GYROS "GyrX""GyrY"
|
||||||
|
|
||||||
|
@ -502,6 +494,7 @@
|
||||||
#define TR_FLMODE TR("Phase", "Phases")
|
#define TR_FLMODE TR("Phase", "Phases")
|
||||||
#define TR_MIXWARNING "Alerte"
|
#define TR_MIXWARNING "Alerte"
|
||||||
#define TR_OFF "OFF"
|
#define TR_OFF "OFF"
|
||||||
|
#define TR_ANTENNA "Antenna"
|
||||||
#define TR_NO_INFORMATION TR("No info", "No information")
|
#define TR_NO_INFORMATION TR("No info", "No information")
|
||||||
#define TR_MULTPX "Opération"
|
#define TR_MULTPX "Opération"
|
||||||
#define TR_DELAYDOWN "Retard bas"
|
#define TR_DELAYDOWN "Retard bas"
|
||||||
|
@ -947,8 +940,16 @@
|
||||||
#define TR_UNIT "Unité"
|
#define TR_UNIT "Unité"
|
||||||
#define TR_TELEMETRY_NEWSENSOR TR(INDENT"Nouveau capteur...", INDENT "Ajout d'un nouveau capteur...")
|
#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_CHANNELRANGE TR(INDENT "Canaux", INDENT "Plage de canaux")
|
||||||
#define TR_ANTENNASELECTION TR(INDENT "Antenne", INDENT "Choix antenne")
|
|
||||||
#define TR_ANTENNACONFIRM1 "Vraiment changer?"
|
#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_ANTENNACONFIRM2 TR("Vérif antenne", "Installer l'antenne d'abord!")
|
||||||
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Nécessite firm."
|
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Nécessite firm."
|
||||||
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
||||||
|
|
|
@ -395,14 +395,6 @@
|
||||||
#define LEN_VCELLINDEX "\010"
|
#define LEN_VCELLINDEX "\010"
|
||||||
#define TR_VCELLINDEX "Minore\0 ""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Maggiore""Delta\0"
|
#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 LEN_GYROS "\004"
|
||||||
#define TR_GYROS "GyrX""GyrY"
|
#define TR_GYROS "GyrX""GyrY"
|
||||||
|
|
||||||
|
@ -503,6 +495,7 @@
|
||||||
#define TR_FLMODE "Fase"
|
#define TR_FLMODE "Fase"
|
||||||
#define TR_MIXWARNING "Avviso"
|
#define TR_MIXWARNING "Avviso"
|
||||||
#define TR_OFF "OFF"
|
#define TR_OFF "OFF"
|
||||||
|
#define TR_ANTENNA "Antenna"
|
||||||
#define TR_NO_INFORMATION TR("No info", "No information")
|
#define TR_NO_INFORMATION TR("No info", "No information")
|
||||||
#define TR_MULTPX "MultPx"
|
#define TR_MULTPX "MultPx"
|
||||||
#define TR_DELAYDOWN "Post.Giù "
|
#define TR_DELAYDOWN "Post.Giù "
|
||||||
|
@ -946,8 +939,16 @@
|
||||||
#define TR_UNIT "Unita"
|
#define TR_UNIT "Unita"
|
||||||
#define TR_TELEMETRY_NEWSENSOR INDENT "Aggiungi nuovo sensore..."
|
#define TR_TELEMETRY_NEWSENSOR INDENT "Aggiungi nuovo sensore..."
|
||||||
#define TR_CHANNELRANGE INDENT "Numero Canali"
|
#define TR_CHANNELRANGE INDENT "Numero Canali"
|
||||||
#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenna selection")
|
#define TR_ANTENNACONFIRM1 "EXT. ANTENNA"
|
||||||
#define TR_ANTENNACONFIRM1 "Really switch?"
|
#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_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!")
|
||||||
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
||||||
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
||||||
|
|
|
@ -377,14 +377,6 @@ TR_GYR_VSRCRAW
|
||||||
#define LEN_VCELLINDEX "\007"
|
#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 "
|
#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 LEN_GYROS "\004"
|
||||||
#define TR_GYROS "GyrX""GyrY"
|
#define TR_GYROS "GyrX""GyrY"
|
||||||
|
|
||||||
|
@ -484,6 +476,7 @@ TR_GYR_VSRCRAW
|
||||||
#define TR_FLMODE TR("Mode", "Modes")
|
#define TR_FLMODE TR("Mode", "Modes")
|
||||||
#define TR_MIXWARNING "Melding"
|
#define TR_MIXWARNING "Melding"
|
||||||
#define TR_OFF "UIT"
|
#define TR_OFF "UIT"
|
||||||
|
#define TR_ANTENNA "Antenna"
|
||||||
#define TR_NO_INFORMATION TR("No info", "No information")
|
#define TR_NO_INFORMATION TR("No info", "No information")
|
||||||
#define TR_MULTPX "Multpx"
|
#define TR_MULTPX "Multpx"
|
||||||
#define TR_DELAYDOWN "Vertr.Dn"
|
#define TR_DELAYDOWN "Vertr.Dn"
|
||||||
|
@ -934,8 +927,16 @@ TR_GYR_VSRCRAW
|
||||||
#define TR_UNIT "Eenheid"
|
#define TR_UNIT "Eenheid"
|
||||||
#define TR_TELEMETRY_NEWSENSOR INDENT "Sensor toevoegen ..."
|
#define TR_TELEMETRY_NEWSENSOR INDENT "Sensor toevoegen ..."
|
||||||
#define TR_CHANNELRANGE TR(INDENT "Kanalen", INDENT "Uitgangs Kanalen") //wg 9XR-Pro
|
#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?"
|
#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_ANTENNACONFIRM2 TR("Check antenna", "Is er zeker een antenne geplaatst!")
|
||||||
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
||||||
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
||||||
|
|
|
@ -395,14 +395,6 @@
|
||||||
#define LEN_VCELLINDEX "\007"
|
#define LEN_VCELLINDEX "\007"
|
||||||
#define TR_VCELLINDEX "Niskie\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Wysokie""Delta\0"
|
#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 LEN_GYROS "\004"
|
||||||
#define TR_GYROS "GyrX""GyrY"
|
#define TR_GYROS "GyrX""GyrY"
|
||||||
|
|
||||||
|
@ -503,6 +495,7 @@
|
||||||
#define TR_FLMODE "Tryb"
|
#define TR_FLMODE "Tryb"
|
||||||
#define TR_MIXWARNING "UWAGA"
|
#define TR_MIXWARNING "UWAGA"
|
||||||
#define TR_OFF "Wył."
|
#define TR_OFF "Wył."
|
||||||
|
#define TR_ANTENNA "Antenna"
|
||||||
#define TR_NO_INFORMATION TR("No info", "No information")
|
#define TR_NO_INFORMATION TR("No info", "No information")
|
||||||
#define TR_MULTPX "Złącz."
|
#define TR_MULTPX "Złącz."
|
||||||
#define TR_DELAYDOWN "Opózn.(-)"
|
#define TR_DELAYDOWN "Opózn.(-)"
|
||||||
|
@ -946,8 +939,16 @@
|
||||||
#define TR_UNIT "Jedn"
|
#define TR_UNIT "Jedn"
|
||||||
#define TR_TELEMETRY_NEWSENSOR INDENT "Dodaj nowy czujnik..."
|
#define TR_TELEMETRY_NEWSENSOR INDENT "Dodaj nowy czujnik..."
|
||||||
#define TR_CHANNELRANGE TR(INDENT "ZakrKn",INDENT "Zakres kanału")
|
#define TR_CHANNELRANGE TR(INDENT "ZakrKn",INDENT "Zakres kanału")
|
||||||
#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenna selection")
|
#define TR_ANTENNACONFIRM1 "EXT. ANTENNA"
|
||||||
#define TR_ANTENNACONFIRM1 "Really switch?"
|
#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_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!")
|
||||||
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
||||||
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
||||||
|
|
|
@ -377,14 +377,6 @@
|
||||||
#define LEN_VCELLINDEX "\007"
|
#define LEN_VCELLINDEX "\007"
|
||||||
#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0"
|
#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 LEN_GYROS "\004"
|
||||||
#define TR_GYROS "GyrX""GyrY"
|
#define TR_GYROS "GyrX""GyrY"
|
||||||
|
|
||||||
|
@ -489,6 +481,7 @@
|
||||||
#define TR_FLMODE "Fase"
|
#define TR_FLMODE "Fase"
|
||||||
#define TR_MIXWARNING "Aviso"
|
#define TR_MIXWARNING "Aviso"
|
||||||
#define TR_OFF "OFF"
|
#define TR_OFF "OFF"
|
||||||
|
#define TR_ANTENNA "Antenna"
|
||||||
#define TR_NO_INFORMATION TR("No info", "No information")
|
#define TR_NO_INFORMATION TR("No info", "No information")
|
||||||
#define TR_MULTPX "Aplicar"
|
#define TR_MULTPX "Aplicar"
|
||||||
#define TR_DELAYDOWN "Atraso Dn"
|
#define TR_DELAYDOWN "Atraso Dn"
|
||||||
|
@ -936,8 +929,16 @@
|
||||||
#define TR_UNIT "Unit"
|
#define TR_UNIT "Unit"
|
||||||
#define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..."
|
#define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..."
|
||||||
#define TR_CHANNELRANGE INDENT "Channel Range"
|
#define TR_CHANNELRANGE INDENT "Channel Range"
|
||||||
#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenna selection")
|
#define TR_ANTENNACONFIRM1 "EXT. ANTENNA"
|
||||||
#define TR_ANTENNACONFIRM1 "Really switch?"
|
#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_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!")
|
||||||
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
||||||
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
||||||
|
|
|
@ -390,14 +390,6 @@
|
||||||
#define LEN_VCELLINDEX "\010"
|
#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"
|
#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 LEN_GYROS "\004"
|
||||||
#define TR_GYROS "GyrX""GyrY"
|
#define TR_GYROS "GyrX""GyrY"
|
||||||
|
|
||||||
|
@ -502,6 +494,7 @@
|
||||||
#define TR_FLMODE TR("Läge","Flyglägen")
|
#define TR_FLMODE TR("Läge","Flyglägen")
|
||||||
#define TR_MIXWARNING "Varning"
|
#define TR_MIXWARNING "Varning"
|
||||||
#define TR_OFF "Av "
|
#define TR_OFF "Av "
|
||||||
|
#define TR_ANTENNA "Antenna"
|
||||||
#define TR_NO_INFORMATION TR("No info", "No information")
|
#define TR_NO_INFORMATION TR("No info", "No information")
|
||||||
#define TR_MULTPX "Multpx"
|
#define TR_MULTPX "Multpx"
|
||||||
#define TR_DELAYDOWN "Dröj Ned"
|
#define TR_DELAYDOWN "Dröj Ned"
|
||||||
|
@ -946,8 +939,16 @@
|
||||||
#define TR_UNIT "Enhet"
|
#define TR_UNIT "Enhet"
|
||||||
#define TR_TELEMETRY_NEWSENSOR INDENT "Lägg till sensor..."
|
#define TR_TELEMETRY_NEWSENSOR INDENT "Lägg till sensor..."
|
||||||
#define TR_CHANNELRANGE INDENT "Kanalområde"
|
#define TR_CHANNELRANGE INDENT "Kanalområde"
|
||||||
#define TR_ANTENNASELECTION TR(INDENT "Antenna", INDENT "Antenna selection")
|
#define TR_ANTENNACONFIRM1 "EXT. ANTENNA"
|
||||||
#define TR_ANTENNACONFIRM1 "Really switch?"
|
#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_ANTENNACONFIRM2 TR("Check antenna", "Make sure antenna is installed!")
|
||||||
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
#define TR_MODULE_PROTOCOL_FLEX_WARN_LINE1 "Requires non"
|
||||||
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
#define TR_MODULE_PROTOCOL_FCC_WARN_LINE1 "Requires FCC"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue