1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-13 19:40:20 +03:00

Merge pull request #8267 from opentx/wismy/racing_mode_rollback

Wismy/racing mode
This commit is contained in:
Bertrand Songis 2021-04-16 17:57:10 +02:00 committed by GitHub
commit 81c7338ab3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
31 changed files with 180 additions and 59 deletions

View file

@ -45,19 +45,6 @@ bool ModuleData::isPxx2Module() const
} }
} }
bool ModuleData::isPxx1Module() const
{
switch(protocol){
case PULSES_PXX_XJT_X16:
case PULSES_PXX_R9M:
case PULSES_PXX_R9M_LITE:
case PULSES_PXX_R9M_LITE_PRO:
return true;
default:
return false;
}
}
bool ModuleData::supportRxNum() const bool ModuleData::supportRxNum() const
{ {
switch (protocol) { switch (protocol) {

View file

@ -215,12 +215,12 @@ class ModuleData {
struct Access { struct Access {
unsigned int receivers; unsigned int receivers;
char receiverName[PXX2_MAX_RECEIVERS_PER_MODULE][PXX2_LEN_RX_NAME+1]; char receiverName[PXX2_MAX_RECEIVERS_PER_MODULE][PXX2_LEN_RX_NAME+1];
unsigned int racingMode;
} access; } access;
void clear() { memset(this, 0, sizeof(ModuleData)); } void clear() { memset(this, 0, sizeof(ModuleData)); }
void convert(RadioDataConversionState & cstate); void convert(RadioDataConversionState & cstate);
bool isPxx2Module() const; bool isPxx2Module() const;
bool isPxx1Module() const;
bool supportRxNum() const; bool supportRxNum() const;
QString polarityToString() const { return ppm.pulsePol ? tr("Positive") : tr("Negative"); } QString polarityToString() const { return ppm.pulsePol ? tr("Positive") : tr("Negative"); }
QString rfProtocolToString() const; QString rfProtocolToString() const;

View file

@ -2158,7 +2158,8 @@ class ModuleUnionField: public UnionField<unsigned int> {
module(module) module(module)
{ {
internalField.Append(new UnsignedField<3>(this, module.access.receivers)); internalField.Append(new UnsignedField<3>(this, module.access.receivers));
internalField.Append(new SpareBitsField<5>(this)); internalField.Append(new SpareBitsField<4>(this));
internalField.Append(new UnsignedField<1>(this, module.access.racingMode));
for (int i = 0; i < PXX2_MAX_RECEIVERS_PER_MODULE; i++) for (int i = 0; i < PXX2_MAX_RECEIVERS_PER_MODULE; i++)
internalField.Append(new CharField<8>(this, receiverName[i])); internalField.Append(new CharField<8>(this, receiverName[i]));

View file

@ -182,6 +182,7 @@ void TimerPanel::onCountdownBeepChanged(int index)
#define MASK_ACCESS (1<<13) #define MASK_ACCESS (1<<13)
#define MASK_RX_FREQ (1<<14) #define MASK_RX_FREQ (1<<14)
#define MASK_RF_POWER (1<<15) #define MASK_RF_POWER (1<<15)
#define MASK_RF_RACING_MODE (1<<16)
quint8 ModulePanel::failsafesValueDisplayType = ModulePanel::FAILSAFE_DISPLAY_PERCENT; quint8 ModulePanel::failsafesValueDisplayType = ModulePanel::FAILSAFE_DISPLAY_PERCENT;
@ -371,9 +372,9 @@ void ModulePanel::setupFailsafes()
void ModulePanel::update() void ModulePanel::update()
{ {
const PulsesProtocol protocol = (PulsesProtocol)module.protocol; const auto protocol = (PulsesProtocol)module.protocol;
const Board::Type board = firmware->getBoard(); const auto board = firmware->getBoard();
const Multiprotocols::MultiProtocolDefinition & pdef = multiProtocols.getProtocol(module.multi.rfProtocol); const auto & pdef = multiProtocols.getProtocol(module.multi.rfProtocol);
unsigned int mask = 0; unsigned int mask = 0;
unsigned int max_rx_num = 63; unsigned int max_rx_num = 63;
@ -406,6 +407,8 @@ void ModulePanel::update()
mask |= MASK_RX_NUMBER | MASK_ACCESS; mask |= MASK_RX_NUMBER | MASK_ACCESS;
if (moduleIdx == 0 && HAS_EXTERNAL_ANTENNA(board) && generalSettings.antennaMode == 0 /* per model */) if (moduleIdx == 0 && HAS_EXTERNAL_ANTENNA(board) && generalSettings.antennaMode == 0 /* per model */)
mask |= MASK_ANTENNA; mask |= MASK_ANTENNA;
if (protocol == PULSES_ACCESS_ISRM && module.channelsCount == 8)
mask |= MASK_RF_RACING_MODE;
break; break;
case PULSES_LP45: case PULSES_LP45:
case PULSES_DSM2: case PULSES_DSM2:
@ -447,8 +450,6 @@ void ModulePanel::update()
mask |= MASK_CHANNELS_RANGE| MASK_CHANNELS_COUNT | MASK_FAILSAFES; mask |= MASK_CHANNELS_RANGE| MASK_CHANNELS_COUNT | MASK_FAILSAFES;
mask |= MASK_SUBTYPES | MASK_RX_FREQ | MASK_RF_POWER; mask |= MASK_SUBTYPES | MASK_RX_FREQ | MASK_RF_POWER;
break; break;
case PULSES_OFF:
break;
default: default:
break; break;
} }
@ -512,6 +513,14 @@ void ModulePanel::update()
ui->antennaMode->hide(); ui->antennaMode->hide();
} }
if (mask & MASK_RF_RACING_MODE) {
ui->racingMode->show();
ui->racingMode->setChecked(module.access.racingMode);
}
else {
ui->racingMode->hide();
}
// R9M options // R9M options
ui->r9mPower->setVisible(mask & MASK_RF_POWER); ui->r9mPower->setVisible(mask & MASK_RF_POWER);
ui->label_r9mPower->setVisible(mask & MASK_RF_POWER); ui->label_r9mPower->setVisible(mask & MASK_RF_POWER);
@ -803,6 +812,11 @@ void ModulePanel::on_disableChMap_stateChanged(int state)
module.multi.disableMapping = (state == Qt::Checked); module.multi.disableMapping = (state == Qt::Checked);
} }
void ModulePanel::on_racingMode_stateChanged(int state)
{
module.access.racingMode = (state == Qt::Checked);
}
void ModulePanel::on_autoBind_stateChanged(int state) void ModulePanel::on_autoBind_stateChanged(int state)
{ {
module.multi.autoBindMode = (state == Qt::Checked); module.multi.autoBindMode = (state == Qt::Checked);

View file

@ -95,6 +95,7 @@ class ModulePanel : public ModelPanel
void onSubTypeChanged(); void onSubTypeChanged();
void on_autoBind_stateChanged(int state); void on_autoBind_stateChanged(int state);
void on_disableChMap_stateChanged(int state); void on_disableChMap_stateChanged(int state);
void on_racingMode_stateChanged(int state);
void on_disableTelem_stateChanged(int state); void on_disableTelem_stateChanged(int state);
void on_lowPower_stateChanged(int state); void on_lowPower_stateChanged(int state);
void on_r9mPower_currentIndexChanged(int index); void on_r9mPower_currentIndexChanged(int index);

View file

@ -1077,7 +1077,21 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="11" column="0" colspan="2"> <item row="7" column="1">
<widget class="QCheckBox" name="disableTelem">
<property name="text">
<string>Disable Telemetry</string>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QCheckBox" name="racingMode">
<property name="text">
<string>Racing Mode</string>
</property>
</widget>
</item>
<item row="12" column="0" colspan="2">
<spacer name="horizontalSpacer_3"> <spacer name="horizontalSpacer_3">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -1090,13 +1104,6 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="7" column="1">
<widget class="QCheckBox" name="disableTelem">
<property name="text">
<string>Disable Telemetry</string>
</property>
</widget>
</item>
<item row="10" column="1"> <item row="10" column="1">
<widget class="QCheckBox" name="disableChMap"> <widget class="QCheckBox" name="disableChMap">
<property name="text"> <property name="text">

View file

@ -853,6 +853,7 @@ enum Functions {
FUNC_LOGS, FUNC_LOGS,
FUNC_BACKLIGHT, FUNC_BACKLIGHT,
FUNC_SCREENSHOT, FUNC_SCREENSHOT,
FUNC_RACING_MODE,
#if defined(DEBUG) #if defined(DEBUG)
FUNC_TEST, // should remain the last before MAX as not added in Companion FUNC_TEST, // should remain the last before MAX as not added in Companion
#endif #endif

View file

@ -451,7 +451,8 @@ PACK(struct ModuleData {
int8_t refreshRate; // definition as framelength for ppm (* 5 + 225 = time in 1/10 ms) int8_t refreshRate; // definition as framelength for ppm (* 5 + 225 = time in 1/10 ms)
} sbus); } sbus);
NOBACKUP(PACK(struct { NOBACKUP(PACK(struct {
uint8_t receivers; // 5 bits spare uint8_t receivers:7; // 4 bits spare
uint8_t racingMode:1;
char receiverName[PXX2_MAX_RECEIVERS_PER_MODULE][PXX2_LEN_RX_NAME]; char receiverName[PXX2_MAX_RECEIVERS_PER_MODULE][PXX2_LEN_RX_NAME];
}) pxx2); }) pxx2);
NOBACKUP(PACK(struct { NOBACKUP(PACK(struct {
@ -475,14 +476,21 @@ PACK(struct ModuleData {
}; };
// Helper functions to set both of the rfProto protocol at the same time // Helper functions to set both of the rfProto protocol at the same time
NOBACKUP(inline uint8_t getMultiProtocol() { NOBACKUP(inline uint8_t getMultiProtocol() const
{
return ((uint8_t) (rfProtocol & 0x0F)) + (multi.rfProtocolExtra << 4); return ((uint8_t) (rfProtocol & 0x0F)) + (multi.rfProtocolExtra << 4);
}) })
NOBACKUP(inline void setMultiProtocol(uint8_t proto) { NOBACKUP(inline void setMultiProtocol(uint8_t proto)
{
rfProtocol = (uint8_t) (proto & 0x0F); rfProtocol = (uint8_t) (proto & 0x0F);
multi.rfProtocolExtra = (proto & 0x70) >> 4; multi.rfProtocolExtra = (proto & 0x70) >> 4;
}) })
NOBACKUP(inline uint8_t getChannelsCount() const
{
return channelsCount + 8;
})
}); });
/* /*

View file

@ -376,10 +376,18 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext
case FUNC_SCREENSHOT: case FUNC_SCREENSHOT:
if (!(functionsContext.activeSwitches & switch_mask)) { if (!(functionsContext.activeSwitches & switch_mask)) {
mainRequestFlags |= (1 << REQUEST_SCREENSHOT); mainRequestFlags |= (1u << REQUEST_SCREENSHOT);
} }
break; break;
#if defined(PXX2)
case FUNC_RACING_MODE:
if (isRacingModeEnabled()) {
newActiveFunctions |= (1u << FUNCTION_RACING_MODE);
}
break;
#endif
#if defined(DEBUG) #if defined(DEBUG)
case FUNC_TEST: case FUNC_TEST:
testFunc(); testFunc();

View file

@ -92,6 +92,7 @@ enum MenuModelSetupItems {
ITEM_MODEL_SETUP_INTERNAL_MODULE_SYNCSTATUS, ITEM_MODEL_SETUP_INTERNAL_MODULE_SYNCSTATUS,
#endif #endif
ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS, ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS,
ITEM_MODEL_SETUP_INTERNAL_MODULE_RACING_MODE,
ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE, ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE,
ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM, ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM,
ITEM_MODEL_SETUP_INTERNAL_MODULE_OPTIONS, ITEM_MODEL_SETUP_INTERNAL_MODULE_OPTIONS,
@ -345,6 +346,7 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event)
MULTIMODULE_SUBTYPE_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_SUBTYPE */ \ MULTIMODULE_SUBTYPE_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_SUBTYPE */ \
MULTIMODULE_STATUS_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_STATUS, ITEM_MODEL_SETUP_INTERNAL_MODULE_SYNCSTATUS */ \ MULTIMODULE_STATUS_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_STATUS, ITEM_MODEL_SETUP_INTERNAL_MODULE_SYNCSTATUS */ \
MODULE_CHANNELS_ROWS(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS */ \ MODULE_CHANNELS_ROWS(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS */ \
IF_ALLOW_RACING_MODE(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_RACING_MODE */ \
IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, MODULE_BIND_ROWS(INTERNAL_MODULE)), /* *ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE */\ IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, MODULE_BIND_ROWS(INTERNAL_MODULE)), /* *ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE */\
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM */ \ IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM */ \
MODULE_OPTION_ROW(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_OPTIONS */ \ MODULE_OPTION_ROW(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_OPTIONS */ \
@ -1214,6 +1216,16 @@ void menuModelSetup(event_t event)
break; break;
} }
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_RACING_MODE:
{
ModuleData & moduleData = g_model.moduleData[moduleIdx];
lcdDrawText(INDENT_WIDTH, y, STR_RACING_MODE);
moduleData.pxx2.racingMode = editCheckBox(moduleData.pxx2.racingMode, MODEL_SETUP_2ND_COLUMN, y, "", attr, event);
break;
}
#endif
#if defined(PCBX7) || defined(PCBX9LITE) || defined(PCBXLITE) #if defined(PCBX7) || defined(PCBX9LITE) || defined(PCBXLITE)
case ITEM_MODEL_SETUP_TRAINER_PPM_PARAMS: case ITEM_MODEL_SETUP_TRAINER_PPM_PARAMS:
lcdDrawTextAlignedLeft(y, STR_PPMFRAME); lcdDrawTextAlignedLeft(y, STR_PPMFRAME);
@ -1494,7 +1506,6 @@ void menuModelSetup(event_t event)
if (event == EVT_KEY_LONG(KEY_ENTER)) { if (event == EVT_KEY_LONG(KEY_ENTER)) {
killEvents(event); killEvents(event);
setCustomFailsafe(moduleIdx); setCustomFailsafe(moduleIdx);
storageDirty(EE_MODEL);
AUDIO_WARNING1(); AUDIO_WARNING1();
SEND_FAILSAFE_NOW(moduleIdx); SEND_FAILSAFE_NOW(moduleIdx);
} }

View file

@ -87,6 +87,7 @@ enum MenuModelSetupItems {
ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL, ITEM_MODEL_SETUP_INTERNAL_MODULE_LABEL,
ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE, ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE,
ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS, ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS,
ITEM_MODEL_SETUP_INTERNAL_MODULE_RACING_MODE,
ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE, ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE,
ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM, ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM,
ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE, ITEM_MODEL_SETUP_INTERNAL_MODULE_FAILSAFE,
@ -362,6 +363,7 @@ void menuModelSetup(event_t event)
LABEL(InternalModule), LABEL(InternalModule),
INTERNAL_MODULE_TYPE_ROWS, INTERNAL_MODULE_TYPE_ROWS,
MODULE_CHANNELS_ROWS(INTERNAL_MODULE), MODULE_CHANNELS_ROWS(INTERNAL_MODULE),
IF_ALLOW_RACING_MODE(INTERNAL_MODULE),
IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, MODULE_BIND_ROWS(INTERNAL_MODULE)), // RxNum, [Bind] and [Range] buttons IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, MODULE_BIND_ROWS(INTERNAL_MODULE)), // RxNum, [Bind] and [Range] buttons
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // RxNum for ACCESS IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), // RxNum for ACCESS
IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), // Failsafe IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), // Failsafe
@ -1098,6 +1100,15 @@ void menuModelSetup(event_t event)
break; break;
} }
case ITEM_MODEL_SETUP_INTERNAL_MODULE_RACING_MODE:
{
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
ModuleData & moduleData = g_model.moduleData[moduleIdx];
lcdDrawText(INDENT_WIDTH, y, STR_RACING_MODE);
moduleData.pxx2.racingMode = editCheckBox(moduleData.pxx2.racingMode, MODEL_SETUP_2ND_COLUMN, y, "", attr, event);
break;
}
case ITEM_MODEL_SETUP_TRAINER_PPM_PARAMS: case ITEM_MODEL_SETUP_TRAINER_PPM_PARAMS:
lcdDrawTextAlignedLeft(y, STR_PPMFRAME); lcdDrawTextAlignedLeft(y, STR_PPMFRAME);
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, (int16_t)g_model.trainerData.frameLength*5 + 225, (menuHorizontalPosition<=0 ? attr : 0) | PREC1|LEFT); lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, (int16_t)g_model.trainerData.frameLength*5 + 225, (menuHorizontalPosition<=0 ? attr : 0) | PREC1|LEFT);
@ -1270,7 +1281,6 @@ void menuModelSetup(event_t event)
if (event == EVT_KEY_LONG(KEY_ENTER)) { if (event == EVT_KEY_LONG(KEY_ENTER)) {
killEvents(event); killEvents(event);
setCustomFailsafe(moduleIdx); setCustomFailsafe(moduleIdx);
storageDirty(EE_MODEL);
AUDIO_WARNING1(); AUDIO_WARNING1();
SEND_FAILSAFE_NOW(moduleIdx); SEND_FAILSAFE_NOW(moduleIdx);
} }

View file

@ -75,6 +75,7 @@ enum MenuModelSetupItems {
ITEM_MODEL_SETUP_INTERNAL_MODULE_SYNCSTATUS, ITEM_MODEL_SETUP_INTERNAL_MODULE_SYNCSTATUS,
#endif #endif
ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS, ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS,
ITEM_MODEL_SETUP_INTERNAL_MODULE_RACING_MODE,
ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE, ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE,
ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM, ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM,
ITEM_MODEL_SETUP_INTERNAL_MODULE_OPTIONS, ITEM_MODEL_SETUP_INTERNAL_MODULE_OPTIONS,
@ -577,6 +578,7 @@ void onModelAntennaSwitchConfirm(const char * result)
MODULE_TYPE_ROWS(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE*/ \ MODULE_TYPE_ROWS(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_TYPE*/ \
MULTIMODULE_STATUS_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_STATUS, ITEM_MODEL_SETUP_INTERNAL_MODULE_SYNCSTATUS */ \ MULTIMODULE_STATUS_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_STATUS, ITEM_MODEL_SETUP_INTERNAL_MODULE_SYNCSTATUS */ \
MODULE_CHANNELS_ROWS(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS*/ \ MODULE_CHANNELS_ROWS(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS*/ \
IF_ALLOW_RACING_MODE(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_RACING_MODE */ \
IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, MODULE_BIND_ROWS(INTERNAL_MODULE)), /* *ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE */\ IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, MODULE_BIND_ROWS(INTERNAL_MODULE)), /* *ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE */\
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM*/ \ IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM*/ \
MODULE_OPTION_ROW(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_OPTIONS */ \ MODULE_OPTION_ROW(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_OPTIONS */ \
@ -1247,6 +1249,17 @@ bool menuModelSetup(event_t event)
} }
break; break;
} }
#if defined(HARDWARE_INTERNAL_MODULE)
case ITEM_MODEL_SETUP_INTERNAL_MODULE_RACING_MODE:
{
ModuleData & moduleData = g_model.moduleData[moduleIdx];
lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, STR_RACING_MODE);
moduleData.pxx2.racingMode = editCheckBox(moduleData.pxx2.racingMode, MODEL_SETUP_2ND_COLUMN, y, attr, event);
break;
}
#endif
case ITEM_MODEL_SETUP_TRAINER_LABEL: case ITEM_MODEL_SETUP_TRAINER_LABEL:
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_TRAINER); lcdDrawText(MENUS_MARGIN_LEFT, y, STR_TRAINER);
break; break;
@ -1653,7 +1666,6 @@ bool menuModelSetup(event_t event)
if (event == EVT_KEY_LONG(KEY_ENTER)) { if (event == EVT_KEY_LONG(KEY_ENTER)) {
killEvents(event); killEvents(event);
setCustomFailsafe(moduleIdx); setCustomFailsafe(moduleIdx);
storageDirty(EE_MODEL);
AUDIO_WARNING1(); AUDIO_WARNING1();
SEND_FAILSAFE_NOW(moduleIdx); SEND_FAILSAFE_NOW(moduleIdx);
} }

View file

@ -184,6 +184,34 @@ inline uint8_t MODULE_CHANNELS_ROWS(int moduleIdx)
} }
} }
#if defined(PXX2)
inline bool isRacingModeAllowed()
{
return isModulePXX2(INTERNAL_MODULE) && g_model.moduleData[INTERNAL_MODULE].getChannelsCount() == 8;
}
inline bool isRacingModeEnabled()
{
return isRacingModeAllowed() && g_model.moduleData[INTERNAL_MODULE].pxx2.racingMode;
}
inline uint8_t IF_ALLOW_RACING_MODE(int moduleIdx)
{
if (!IS_MODULE_ENABLED(moduleIdx)) {
return HIDDEN_ROW;
}
else if (isRacingModeAllowed()) {
return 0;
}
return HIDDEN_ROW;
}
#else
inline uint8_t IF_ALLOW_RACING_MODE(int)
{
return HIDDEN_ROW;
}
#endif
#if defined(MULTIMODULE) #if defined(MULTIMODULE)
inline uint8_t MULTI_DISABLE_CHAN_MAP_ROW(uint8_t moduleIdx) inline uint8_t MULTI_DISABLE_CHAN_MAP_ROW(uint8_t moduleIdx)
{ {

View file

@ -135,7 +135,7 @@ static int luaModelGetModule(lua_State *L)
lua_pushtableinteger(L, "subType", module.subType); lua_pushtableinteger(L, "subType", module.subType);
lua_pushtableinteger(L, "modelId", g_model.header.modelId[idx]); lua_pushtableinteger(L, "modelId", g_model.header.modelId[idx]);
lua_pushtableinteger(L, "firstChannel", module.channelsStart); lua_pushtableinteger(L, "firstChannel", module.channelsStart);
lua_pushtableinteger(L, "channelsCount", module.channelsCount + 8); lua_pushtableinteger(L, "channelsCount", module.getChannelsCount());
lua_pushtableinteger(L, "Type", module.type); lua_pushtableinteger(L, "Type", module.type);
#if defined(MULTIMODULE) #if defined(MULTIMODULE)
if (module.type == MODULE_TYPE_MULTIMODULE) { if (module.type == MODULE_TYPE_MULTIMODULE) {

View file

@ -873,6 +873,7 @@ enum FunctionsActive {
FUNCTION_BACKGND_MUSIC, FUNCTION_BACKGND_MUSIC,
FUNCTION_BACKGND_MUSIC_PAUSE, FUNCTION_BACKGND_MUSIC_PAUSE,
FUNCTION_BACKLIGHT, FUNCTION_BACKLIGHT,
FUNCTION_RACING_MODE,
}; };
#define VARIO_FREQUENCY_ZERO 700/*Hz*/ #define VARIO_FREQUENCY_ZERO 700/*Hz*/

View file

@ -547,7 +547,7 @@ bool setupPulsesInternalModule(uint8_t protocol)
else { else {
#if defined(INTMODULE_HEARTBEAT) #if defined(INTMODULE_HEARTBEAT)
mixerSchedulerResetTimer(); mixerSchedulerResetTimer();
mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_PERIOD + 1000 /* backup */); mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_PERIOD + 2000 /* backup */);
#else #else
mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_PERIOD); mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_PERIOD);
#endif #endif
@ -641,10 +641,11 @@ void setCustomFailsafe(uint8_t moduleIndex)
g_model.failsafeChannels[ch] = channelOutputs[ch]; g_model.failsafeChannels[ch] = channelOutputs[ch];
} }
} }
storageDirty(EE_MODEL);
} }
} }
int32_t getChannelValue(uint8_t channel) { int32_t getChannelValue(uint8_t channel)
{
return channelOutputs[channel] + 2*PPM_CH_CENTER(channel) - 2*PPM_CENTER; return channelOutputs[channel] + 2*PPM_CH_CENTER(channel) - 2*PPM_CENTER;
} }

View file

@ -47,14 +47,20 @@ void Pxx2Pulses::addFlag1(uint8_t module)
else { else {
subType = g_model.moduleData[module].subType; subType = g_model.moduleData[module].subType;
} }
Pxx2Transport::addByte(subType << 4);
uint8_t flag1 = subType << 4u;
if (isRacingModeEnabled() && isFunctionActive(FUNCTION_RACING_MODE)) {
flag1 |= PXX2_CHANNELS_FLAG1_RACING_MODE;
}
Pxx2Transport::addByte(flag1);
} }
void Pxx2Pulses::addPulsesValues(uint16_t low, uint16_t high) void Pxx2Pulses::addPulsesValues(uint16_t low, uint16_t high)
{ {
Pxx2Transport::addByte(low); // Low byte of channel Pxx2Transport::addByte(low); // Low byte of channel
Pxx2Transport::addByte(((low >> 8) & 0x0F) | (high << 4)); // 4 bits each from 2 channels Pxx2Transport::addByte(((low >> 8u) & 0x0Fu) | (high << 4u)); // 4 bits each from 2 channels
Pxx2Transport::addByte(high >> 4); // High byte of channel Pxx2Transport::addByte(high >> 4u); // High byte of channel
} }
void Pxx2Pulses::addChannels(uint8_t module) void Pxx2Pulses::addChannels(uint8_t module)

View file

@ -46,6 +46,7 @@
#define PXX2_CHANNELS_FLAG0_FAILSAFE (1 << 6) #define PXX2_CHANNELS_FLAG0_FAILSAFE (1 << 6)
#define PXX2_CHANNELS_FLAG0_RANGECHECK (1 << 7) #define PXX2_CHANNELS_FLAG0_RANGECHECK (1 << 7)
#define PXX2_CHANNELS_FLAG1_RACING_MODE (1 << 3)
#define PXX2_RX_SETTINGS_FLAG0_WRITE (1 << 6) #define PXX2_RX_SETTINGS_FLAG0_WRITE (1 << 6)
@ -268,6 +269,7 @@ enum ReceiverCapabilities {
RECEIVER_CAPABILITY_TELEMETRY_25MW, RECEIVER_CAPABILITY_TELEMETRY_25MW,
RECEIVER_CAPABILITY_ENABLE_PWM_CH5_CH6, RECEIVER_CAPABILITY_ENABLE_PWM_CH5_CH6,
RECEIVER_CAPABILITY_FPORT2, RECEIVER_CAPABILITY_FPORT2,
RECEIVER_CAPABILITY_RACING_MODE,
RECEIVER_CAPABILITY_COUNT RECEIVER_CAPABILITY_COUNT
}; };

View file

@ -834,3 +834,4 @@ const char STR_ABOUT_PARENTS_4[] = TR_ABOUT_PARENTS_4;
const char STR_AUTH_FAILURE[] = TR_AUTH_FAILURE; const char STR_AUTH_FAILURE[] = TR_AUTH_FAILURE;
const char STR_PROTOCOL[] = TR_PROTOCOL; const char STR_PROTOCOL[] = TR_PROTOCOL;
const char STR_RACING_MODE[] = TR_RACING_MODE;

View file

@ -969,6 +969,7 @@ extern const char STR_ABOUT_PARENTS_4[];
extern const char STR_AUTH_FAILURE[]; extern const char STR_AUTH_FAILURE[];
extern const char STR_PROTOCOL[]; extern const char STR_PROTOCOL[];
extern const char STR_RACING_MODE[];
#define CHR_HOUR TR_CHR_HOUR #define CHR_HOUR TR_CHR_HOUR
#define CHR_INPUT TR_CHR_INPUT #define CHR_INPUT TR_CHR_INPUT

View file

@ -231,9 +231,10 @@
#endif #endif
#define TR_SF_SCREENSHOT "Snímek LCD\0" #define TR_SF_SCREENSHOT "Snímek LCD\0"
#define TR_SF_RACING_MODE "RacingMode\0"
#define TR_SF_RESERVE "[rezerva]\0 " #define TR_SF_RESERVE "[rezerva]\0 "
#define TR_VFSWFUNC TR_SF_SAFETY "Trenér \0 ""Insta-Trim\0""Reset\0 ""Změna \0 " TR_ADJUST_GVAR "Hlasitost\0 " "SetFailsafe" "RangeCheck\0" "ModuleBind\0" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podsvětlení" TR_SF_SCREENSHOT TR_SF_TEST #define TR_VFSWFUNC TR_SF_SAFETY "Trenér \0 ""Insta-Trim\0""Reset\0 ""Změna \0 " TR_ADJUST_GVAR "Hlasitost\0 " "SetFailsafe" "RangeCheck\0" "ModuleBind\0" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podsvětlení" TR_SF_SCREENSHOT TR_SF_RACING_MODE TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\012") #define LEN_VFSWRESET TR("\004", "\012")
@ -1225,6 +1226,7 @@
#define TR_JITTER_FILTER "ADC Filtr" #define TR_JITTER_FILTER "ADC Filtr"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage") #define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure" #define TR_AUTH_FAILURE "Auth-failure"
#define TR_RACING_MODE "Racing mode"
#define ZSTR_VFR "VFR" #define ZSTR_VFR "VFR"
#define ZSTR_RSSI "RSSI" #define ZSTR_RSSI "RSSI"

View file

@ -234,9 +234,10 @@
#endif #endif
#define TR_SF_SCREENSHOT "Screenshot" #define TR_SF_SCREENSHOT "Screenshot"
#define TR_SF_RACING_MODE "RacingMode"
#define TR_SF_RESERVE "[Reserve]\0" #define TR_SF_RESERVE "[Reserve]\0"
#define TR_VFSWFUNC TR_SF_SAFETY "Lehrer \0 ""Inst. Trim""Rücksetz.\0""Setze \0 " TR_ADJUST_GVAR "Lautstr.\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_SF_SCREENSHOT TR_SF_TEST #define TR_VFSWFUNC TR_SF_SAFETY "Lehrer \0 ""Inst. Trim""Rücksetz.\0""Setze \0 " TR_ADJUST_GVAR "Lautstr.\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "LCD Licht\0" TR_SF_SCREENSHOT TR_SF_RACING_MODE TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011") #define LEN_VFSWRESET TR("\004", "\011")
@ -1231,6 +1232,7 @@
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage") #define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure" #define TR_AUTH_FAILURE "Auth-failure"
#define TR_RACING_MODE "Racing mode"
// ---------------------------------------------------------------- // ----------------------------------------------------------------
#define ZSTR_VFR "VFR" #define ZSTR_VFR "VFR"

View file

@ -234,9 +234,10 @@
#endif #endif
#define TR_SF_SCREENSHOT "Screenshot" #define TR_SF_SCREENSHOT "Screenshot"
#define TR_SF_RACING_MODE "RacingMode"
#define TR_SF_RESERVE "[reserve]\0" #define TR_SF_RESERVE "[reserve]\0"
#define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_SF_SCREENSHOT TR_SF_TEST #define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_SF_SCREENSHOT TR_SF_RACING_MODE TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011") #define LEN_VFSWRESET TR("\004", "\011")
@ -1229,6 +1230,7 @@
#define TR_JITTER_FILTER "ADC filter" #define TR_JITTER_FILTER "ADC filter"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage") #define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure" #define TR_AUTH_FAILURE "Auth-failure"
#define TR_RACING_MODE "Racing mode"
#define ZSTR_VFR "VFR" #define ZSTR_VFR "VFR"
#define ZSTR_RSSI "RSSI" #define ZSTR_RSSI "RSSI"

View file

@ -231,10 +231,11 @@
#define TR_SF_SAFETY "---\0 " #define TR_SF_SAFETY "---\0 "
#endif #endif
#define TR_SF_SCREENSHOT "Captura" #define TR_SF_SCREENSHOT "Captura\0 "
#define TR_SF_RACING_MODE "RacingMode"
#define TR_SF_RESERVE "[reserv.]\0" #define TR_SF_RESERVE "[reserv.]\0"
#define TR_VFSWFUNC TR_SF_SAFETY "Entrenador""Inst. Trim""Reset\0 ""Ajuste \0 " TR_ADJUST_GVAR "Volumen\0 " "Failsafe\0 " "CheckRango" "Enl.módulo" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Luz Fondo\0" TR_SF_SCREENSHOT TR_SF_TEST #define TR_VFSWFUNC TR_SF_SAFETY "Entrenador""Inst. Trim""Reset\0 ""Ajuste \0 " TR_ADJUST_GVAR "Volumen\0 " "Failsafe\0 " "CheckRango" "Enl.módulo" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Luz Fondo\0" TR_SF_SCREENSHOT TR_SF_RACING_MODE TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\012") #define LEN_VFSWRESET TR("\004", "\012")
#define TR_FSW_RESET_TELEM TR("Telm", "Telemetría") #define TR_FSW_RESET_TELEM TR("Telm", "Telemetría")
@ -1228,6 +1229,7 @@
#define TR_JITTER_FILTER "Filtro ADC" #define TR_JITTER_FILTER "Filtro ADC"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltaje") #define TR_RTC_CHECK TR("Check RTC", "Check RTC voltaje")
#define TR_AUTH_FAILURE "Fallo " LCDW_128_480_LINEBREAK "autentificación" #define TR_AUTH_FAILURE "Fallo " LCDW_128_480_LINEBREAK "autentificación"
#define TR_RACING_MODE "Racing mode"
#define ZSTR_VFR "VFR" #define ZSTR_VFR "VFR"
#define ZSTR_RSSI "RSSI" #define ZSTR_RSSI "RSSI"

View file

@ -235,9 +235,10 @@
#endif #endif
#define TR_SF_SCREENSHOT "Screenshot" #define TR_SF_SCREENSHOT "Screenshot"
#define TR_SF_RACING_MODE "RacingMode"
#define TR_SF_RESERVE "[reserve]\0" #define TR_SF_RESERVE "[reserve]\0"
#define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_SF_SCREENSHOT TR_SF_TEST #define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_SF_SCREENSHOT TR_SF_RACING_MODE TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011") #define LEN_VFSWRESET TR("\004", "\011")
@ -1237,6 +1238,7 @@
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage") #define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure" #define TR_AUTH_FAILURE "Auth-failure"
#define TR_RACING_MODE "Racing mode"
#define ZSTR_VFR "VFR" #define ZSTR_VFR "VFR"
#define ZSTR_RSSI "RSSI" #define ZSTR_RSSI "RSSI"

View file

@ -237,9 +237,10 @@
#endif #endif
#define TR_SF_SCREENSHOT "Photo Ecran\0 " #define TR_SF_SCREENSHOT "Photo Ecran\0 "
#define TR_SF_RACING_MODE "Racing Mode\0 "
#define TR_SF_RESERVE "[reserve]\0 " #define TR_SF_RESERVE "[reserve]\0 "
#define TR_VFSWFUNC TR_SF_SAFETY "Ecolage\0 ""Trim instant.""Remise à 0\0 ""Déf.\0 " TR_ADJUST_GVAR "Volume\0 " "DéfFailsafe\0 " "Test Port.\0 " "Bind\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Rétroécl.\0 " TR_SF_SCREENSHOT TR_SF_TEST #define TR_VFSWFUNC TR_SF_SAFETY "Ecolage\0 ""Trim instant.""Remise à 0\0 ""Déf.\0 " TR_ADJUST_GVAR "Volume\0 " "DéfFailsafe\0 " "Test Port.\0 " "Bind\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Rétroécl.\0 " TR_SF_SCREENSHOT TR_SF_RACING_MODE TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\012") #define LEN_VFSWRESET TR("\004", "\012")
@ -1253,6 +1254,7 @@
#define TR_JITTER_FILTER "Filtre ADC" #define TR_JITTER_FILTER "Filtre ADC"
#define TR_RTC_CHECK TR("Vérif. RTC", "Vérif. pile RTC") #define TR_RTC_CHECK TR("Vérif. RTC", "Vérif. pile RTC")
#define TR_AUTH_FAILURE "Auth-failure" #define TR_AUTH_FAILURE "Auth-failure"
#define TR_RACING_MODE "Racing mode"
#define ZSTR_VFR "VFR" #define ZSTR_VFR "VFR"
#define ZSTR_RSSI "RSSI" #define ZSTR_RSSI "RSSI"

View file

@ -238,9 +238,10 @@
#endif #endif
#define TR_SF_SCREENSHOT "Screenshot\0 " #define TR_SF_SCREENSHOT "Screenshot\0 "
#define TR_SF_RACING_MODE "Racing Mode\0 "
#define TR_SF_RESERVE "[riserva] \0" #define TR_SF_RESERVE "[riserva] \0"
#define TR_VFSWFUNC TR_SF_SAFETY "Maestro \0 ""Trim Instant.""Azzera\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsafe\0 " "RangeCheck\0 " "ModuleBind\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Retroillum.\0 " TR_SF_SCREENSHOT TR_SF_TEST #define TR_VFSWFUNC TR_SF_SAFETY "Maestro \0 ""Trim Instant.""Azzera\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsafe\0 " "RangeCheck\0 " "ModuleBind\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Retroillum.\0 " TR_SF_SCREENSHOT TR_SF_RACING_MODE TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011") #define LEN_VFSWRESET TR("\004", "\011")
@ -1246,6 +1247,7 @@
#define TR_JITTER_FILTER "Filtro ADC" #define TR_JITTER_FILTER "Filtro ADC"
#define TR_RTC_CHECK TR("Controllo RTC", "Controllo volt. RTC") #define TR_RTC_CHECK TR("Controllo RTC", "Controllo volt. RTC")
#define TR_AUTH_FAILURE "Auth-failure" #define TR_AUTH_FAILURE "Auth-failure"
#define TR_RACING_MODE "Racing mode"
#define ZSTR_VFR "VFR" #define ZSTR_VFR "VFR"
#define ZSTR_RSSI "RSSI" #define ZSTR_RSSI "RSSI"

View file

@ -234,10 +234,11 @@
#define TR_SF_SAFETY "---\0 " #define TR_SF_SAFETY "---\0 "
#endif #endif
#define TR_SF_SCREENSHOT "Schermafdruk" #define TR_SF_SCREENSHOT "Schermafdr"
#define TR_SF_RACING_MODE "RacingMode"
#define TR_SF_RESERVE "[reserve]\0" #define TR_SF_RESERVE "[reserve]\0"
#define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_SF_SCREENSHOT TR_SF_TEST #define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Inst. Trim""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0" TR_SF_SCREENSHOT TR_SF_RACING_MODE TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\012") #define LEN_VFSWRESET TR("\004", "\012")
@ -1238,6 +1239,7 @@
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage") #define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure" #define TR_AUTH_FAILURE "Auth-failure"
#define TR_RACING_MODE "Racing mode"
#define ZSTR_VFR "VFR" #define ZSTR_VFR "VFR"
#define ZSTR_RSSI "RSSI" #define ZSTR_RSSI "RSSI"

View file

@ -235,9 +235,10 @@
#endif #endif
#define TR_SF_SCREENSHOT "Zrzut Ekra" #define TR_SF_SCREENSHOT "Zrzut Ekra"
#define TR_SF_RACING_MODE "RacingMode"
#define TR_SF_RESERVE "[rezerwa]\0" #define TR_SF_RESERVE "[rezerwa]\0"
#define TR_VFSWFUNC TR_SF_SAFETY "Trener \0 ""Inst-Trim ""Resetuj\0 ""Ustaw\0 " TR_ADJUST_GVAR "Głośność\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podświetl\0" TR_SF_SCREENSHOT TR_SF_TEST #define TR_VFSWFUNC TR_SF_SAFETY "Trener \0 ""Inst-Trim ""Resetuj\0 ""Ustaw\0 " TR_ADJUST_GVAR "Głośność\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Podświetl\0" TR_SF_SCREENSHOT TR_SF_RACING_MODE TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011") /*9 decimal*/ #define LEN_VFSWRESET TR("\004", "\011") /*9 decimal*/
@ -1245,6 +1246,7 @@
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage") #define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure" #define TR_AUTH_FAILURE "Auth-failure"
#define TR_RACING_MODE "Racing mode"
#define ZSTR_VFR "VFR" #define ZSTR_VFR "VFR"
#define ZSTR_RSSI "RSSI" #define ZSTR_RSSI "RSSI"

View file

@ -231,9 +231,10 @@
#endif #endif
#define TR_SF_SCREENSHOT "Screenshot" #define TR_SF_SCREENSHOT "Screenshot"
#define TR_SF_RACING_MODE "RacingMode"
#define TR_SF_RESERVE "[reserve]\0 " #define TR_SF_RESERVE "[reserve]\0 "
#define TR_VFSWFUNC TR_SF_SAFETY "Aprendiz\0 ""Ajuste Rapido""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsafe\0 " "RangeCheck\0 " "ModuleBind\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0 " TR_SF_SCREENSHOT TR_SF_TEST #define TR_VFSWFUNC TR_SF_SAFETY "Aprendiz\0 ""Ajuste Rapido""Reset\0 ""Set \0 " TR_ADJUST_GVAR "Volume\0 " "SetFailsafe\0 " "RangeCheck\0 " "ModuleBind\0 " TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Backlight\0 " TR_SF_SCREENSHOT TR_SF_RACING_MODE TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011") #define LEN_VFSWRESET TR("\004", "\011")
@ -1245,7 +1246,7 @@
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage") #define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure" #define TR_AUTH_FAILURE "Auth-failure"
#define TR_RACING_MODE "Racing mode"
#define ZSTR_VFR "VFR" #define ZSTR_VFR "VFR"
#define ZSTR_RSSI "RSSI" #define ZSTR_RSSI "RSSI"
#define ZSTR_R9PW "R9PW" #define ZSTR_R9PW "R9PW"

View file

@ -231,10 +231,11 @@
#define TR_SF_SAFETY "---\0 " #define TR_SF_SAFETY "---\0 "
#endif #endif
#define TR_SF_SCREENSHOT "Skärmbild" #define TR_SF_SCREENSHOT "Skärmbild\0"
#define TR_SF_RACING_MODE "RacingMode"
#define TR_SF_RESERVE "[reserve]\0" #define TR_SF_RESERVE "[reserve]\0"
#define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Sätt Trim\0""Nollställ\0""Sätt\0 " TR_ADJUST_GVAR "Volym\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Belysning\0" TR_SF_SCREENSHOT TR_SF_TEST #define TR_VFSWFUNC TR_SF_SAFETY "Trainer\0 ""Sätt Trim\0""Nollställ\0""Sätt\0 " TR_ADJUST_GVAR "Volym\0 " "SetFailsfe" "RangeCheck" "ModuleBind" TR_SOUND TR_PLAY_TRACK TR_PLAY_VALUE TR_SF_RESERVE TR_SF_PLAY_SCRIPT TR_SF_RESERVE TR_SF_BG_MUSIC TR_VVARIO TR_HAPTIC TR_SDCLOGS "Belysning\0" TR_SF_SCREENSHOT TR_SF_RACING_MODE TR_SF_TEST
#define LEN_VFSWRESET TR("\004", "\011") #define LEN_VFSWRESET TR("\004", "\011")
@ -1245,6 +1246,7 @@
#define TR_JITTER_FILTER "ADC Filter" #define TR_JITTER_FILTER "ADC Filter"
#define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage") #define TR_RTC_CHECK TR("Check RTC", "Check RTC voltage")
#define TR_AUTH_FAILURE "Auth-failure" #define TR_AUTH_FAILURE "Auth-failure"
#define TR_RACING_MODE "Racing mode"
#define ZSTR_VFR "VFR" #define ZSTR_VFR "VFR"
#define ZSTR_RSSI "RSSI" #define ZSTR_RSSI "RSSI"