mirror of
https://github.com/opentx/opentx.git
synced 2025-07-19 14:25:11 +03:00
Special EU firmware for Taranis
Only D16 mode is EU-compatible. This version will hide both D8 and LR12 modes.
This commit is contained in:
parent
7312bd2655
commit
688cd9f724
4 changed files with 54 additions and 33 deletions
|
@ -319,7 +319,6 @@ NANO = NO
|
||||||
# NO - use default Lua allocator
|
# NO - use default Lua allocator
|
||||||
USE_BIN_ALLOCATOR = NO
|
USE_BIN_ALLOCATOR = NO
|
||||||
|
|
||||||
|
|
||||||
# Enable trace of events into Trace Buffer for debugging purposes
|
# Enable trace of events into Trace Buffer for debugging purposes
|
||||||
# Activating any of these options also activates DEBUG and DEBUG_TRACE_BUFFER
|
# Activating any of these options also activates DEBUG and DEBUG_TRACE_BUFFER
|
||||||
# Values = NO, YES
|
# Values = NO, YES
|
||||||
|
@ -343,6 +342,10 @@ LCD_DUAL_BUFFER = NO
|
||||||
# Values = NO, YES
|
# Values = NO, YES
|
||||||
TARANIS_INTERNAL_PPM = NO
|
TARANIS_INTERNAL_PPM = NO
|
||||||
|
|
||||||
|
# Support for D16-EU only (no D8, no LR12 which are not EU compatible)
|
||||||
|
# Value = NO, YES
|
||||||
|
SUPPORT_D16_EU_ONLY = NO
|
||||||
|
|
||||||
# Enable disk IO simulation in simulator
|
# Enable disk IO simulation in simulator
|
||||||
# Simulator will use FatFs module and simulated IO layer that
|
# Simulator will use FatFs module and simulated IO layer that
|
||||||
# uses "./sdcard.image" file as image of SD card.
|
# uses "./sdcard.image" file as image of SD card.
|
||||||
|
@ -874,6 +877,9 @@ ifeq ($(PCB), TARANIS)
|
||||||
ifeq ($(TARANIS_INTERNAL_PPM), YES)
|
ifeq ($(TARANIS_INTERNAL_PPM), YES)
|
||||||
CPPDEFS += -DTARANIS_INTERNAL_PPM
|
CPPDEFS += -DTARANIS_INTERNAL_PPM
|
||||||
endif
|
endif
|
||||||
|
ifeq ($(SUPPORT_D16_EU_ONLY), YES)
|
||||||
|
CPPDEFS += -DMODULE_D16_EU_ONLY_SUPPORT
|
||||||
|
endif
|
||||||
LDSCRIPT = targets/taranis/stm32_flash_bl.ld
|
LDSCRIPT = targets/taranis/stm32_flash_bl.ld
|
||||||
TRGT = arm-none-eabi-
|
TRGT = arm-none-eabi-
|
||||||
OPT = s
|
OPT = s
|
||||||
|
|
|
@ -187,38 +187,43 @@ int getSwitchWarningsCount()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(TARANIS_INTERNAL_PPM)
|
||||||
|
#define IF_INTERNAL_MODULE_ON(x) (g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x))
|
||||||
|
#else
|
||||||
|
#define IF_INTERNAL_MODULE_ON(x) (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF ? HIDDEN_ROW : (uint8_t)(x))
|
||||||
|
#endif
|
||||||
|
#define IF_EXTERNAL_MODULE_ON(x) (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x))
|
||||||
|
#define IF_TRAINER_ON(x) (g_model.trainerMode == TRAINER_MODE_SLAVE ? (uint8_t)(x) : HIDDEN_ROW)
|
||||||
|
#define IF_EXTERNAL_MODULE_XJT(x) (IS_MODULE_XJT(EXTERNAL_MODULE) ? (uint8_t)x : HIDDEN_ROW)
|
||||||
|
#define INTERNAL_MODULE_CHANNELS_ROWS IF_INTERNAL_MODULE_ON(1)
|
||||||
|
#define EXTERNAL_MODULE_CHANNELS_ROWS IF_EXTERNAL_MODULE_ON(IS_MODULE_DSM2(EXTERNAL_MODULE) ? (uint8_t)0 : (uint8_t)1)
|
||||||
|
#define TRAINER_CHANNELS_ROWS() IF_TRAINER_ON(1)
|
||||||
|
#define PORT_CHANNELS_ROWS(x) (x==INTERNAL_MODULE ? INTERNAL_MODULE_CHANNELS_ROWS : (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : TRAINER_CHANNELS_ROWS()))
|
||||||
|
#define FAILSAFE_ROWS(x) (HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW)
|
||||||
|
#define TIMER_ROWS 2|NAVIGATION_LINE_BY_LINE, 0, CASE_PERSISTENT_TIMERS(0) 0, 0
|
||||||
|
#if defined(MODULE_D16_EU_ONLY_SUPPORT)
|
||||||
|
#define EXTERNAL_MODULE_MODE_ROWS IS_MODULE_DSM2(EXTERNAL_MODULE) ? (uint8_t)1 : (uint8_t)0
|
||||||
|
#else
|
||||||
|
#define EXTERNAL_MODULE_MODE_ROWS (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0
|
||||||
|
#endif
|
||||||
|
#if TIMERS == 1
|
||||||
|
#define TIMERS_ROWS TIMER_ROWS
|
||||||
|
#elif TIMERS == 2
|
||||||
|
#define TIMERS_ROWS TIMER_ROWS, TIMER_ROWS
|
||||||
|
#elif TIMERS == 3
|
||||||
|
#define TIMERS_ROWS TIMER_ROWS, TIMER_ROWS, TIMER_ROWS
|
||||||
|
#endif
|
||||||
|
#if defined(REV9E)
|
||||||
|
#define SW_WARN_ITEMS() uint8_t(NAVIGATION_LINE_BY_LINE|(getSwitchWarningsCount()-1)), uint8_t(getSwitchWarningsCount() > 8 ? TITLE_ROW : HIDDEN_ROW), uint8_t(getSwitchWarningsCount() > 16 ? TITLE_ROW : HIDDEN_ROW)
|
||||||
|
#define POT_WARN_ITEMS() uint8_t(g_model.potsWarnMode ? NAVIGATION_LINE_BY_LINE|NUM_POTS : 0), uint8_t(g_model.potsWarnMode ? TITLE_ROW : HIDDEN_ROW)
|
||||||
|
#else
|
||||||
|
#define SW_WARN_ITEMS() uint8_t(NAVIGATION_LINE_BY_LINE|getSwitchWarningsCount())
|
||||||
|
#define POT_WARN_ITEMS() uint8_t(g_model.potsWarnMode ? NAVIGATION_LINE_BY_LINE|NUM_POTS : 0)
|
||||||
|
#endif
|
||||||
|
|
||||||
void menuModelSetup(uint8_t event)
|
void menuModelSetup(uint8_t event)
|
||||||
{
|
{
|
||||||
horzpos_t l_posHorz = m_posHorz;
|
horzpos_t l_posHorz = m_posHorz;
|
||||||
#if defined(TARANIS_INTERNAL_PPM)
|
|
||||||
#define IF_INTERNAL_MODULE_ON(x) (g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x))
|
|
||||||
#else
|
|
||||||
#define IF_INTERNAL_MODULE_ON(x) (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF ? HIDDEN_ROW : (uint8_t)(x))
|
|
||||||
#endif
|
|
||||||
#define IF_EXTERNAL_MODULE_ON(x) (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x))
|
|
||||||
#define IF_TRAINER_ON(x) (g_model.trainerMode == TRAINER_MODE_SLAVE ? (uint8_t)(x) : HIDDEN_ROW)
|
|
||||||
#define IF_EXTERNAL_MODULE_XJT(x) (IS_MODULE_XJT(EXTERNAL_MODULE) ? (uint8_t)x : HIDDEN_ROW)
|
|
||||||
#define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == RF_PROTO_D8)
|
|
||||||
#define INTERNAL_MODULE_CHANNELS_ROWS() IF_INTERNAL_MODULE_ON(1)
|
|
||||||
#define EXTERNAL_MODULE_CHANNELS_ROWS() IF_EXTERNAL_MODULE_ON(IS_MODULE_DSM2(EXTERNAL_MODULE) ? (uint8_t)0 : (uint8_t)1)
|
|
||||||
#define TRAINER_CHANNELS_ROWS() IF_TRAINER_ON(1)
|
|
||||||
#define PORT_CHANNELS_ROWS(x) (x==INTERNAL_MODULE ? INTERNAL_MODULE_CHANNELS_ROWS() : (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS() : TRAINER_CHANNELS_ROWS()))
|
|
||||||
#define FAILSAFE_ROWS(x) ((g_model.moduleData[x].rfProtocol==RF_PROTO_X16 || g_model.moduleData[x].rfProtocol==RF_PROTO_LR12) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW)
|
|
||||||
#define TIMER_ROWS 2|NAVIGATION_LINE_BY_LINE, 0, CASE_PERSISTENT_TIMERS(0) 0, 0
|
|
||||||
#if TIMERS == 1
|
|
||||||
#define TIMERS_ROWS TIMER_ROWS
|
|
||||||
#elif TIMERS == 2
|
|
||||||
#define TIMERS_ROWS TIMER_ROWS, TIMER_ROWS
|
|
||||||
#elif TIMERS == 3
|
|
||||||
#define TIMERS_ROWS TIMER_ROWS, TIMER_ROWS, TIMER_ROWS
|
|
||||||
#endif
|
|
||||||
#if defined(REV9E)
|
|
||||||
#define SW_WARN_ITEMS() uint8_t(NAVIGATION_LINE_BY_LINE|(getSwitchWarningsCount()-1)), uint8_t(getSwitchWarningsCount() > 8 ? TITLE_ROW : HIDDEN_ROW), uint8_t(getSwitchWarningsCount() > 16 ? TITLE_ROW : HIDDEN_ROW)
|
|
||||||
#define POT_WARN_ITEMS() uint8_t(g_model.potsWarnMode ? NAVIGATION_LINE_BY_LINE|NUM_POTS : 0), uint8_t(g_model.potsWarnMode ? TITLE_ROW : HIDDEN_ROW)
|
|
||||||
#else
|
|
||||||
#define SW_WARN_ITEMS() uint8_t(NAVIGATION_LINE_BY_LINE|getSwitchWarningsCount())
|
|
||||||
#define POT_WARN_ITEMS() uint8_t(g_model.potsWarnMode ? NAVIGATION_LINE_BY_LINE|NUM_POTS : 0)
|
|
||||||
#endif
|
|
||||||
bool CURSOR_ON_CELL = (m_posHorz >= 0);
|
bool CURSOR_ON_CELL = (m_posHorz >= 0);
|
||||||
#if defined(TARANIS_INTERNAL_PPM)
|
#if defined(TARANIS_INTERNAL_PPM)
|
||||||
MENU_TAB({ 0, 0, TIMERS_ROWS, 0, 1, 0, 0, LABEL(Throttle), 0, 0, 0, LABEL(PreflightCheck), 0, 0, SW_WARN_ITEMS(), POT_WARN_ITEMS(),
|
MENU_TAB({ 0, 0, TIMERS_ROWS, 0, 1, 0, 0, LABEL(Throttle), 0, 0, 0, LABEL(PreflightCheck), 0, 0, SW_WARN_ITEMS(), POT_WARN_ITEMS(),
|
||||||
|
@ -235,7 +240,7 @@ void menuModelSetup(uint8_t event)
|
||||||
IF_EXTERNAL_MODULE_XJT(FAILSAFE_ROWS(EXTERNAL_MODULE)),
|
IF_EXTERNAL_MODULE_XJT(FAILSAFE_ROWS(EXTERNAL_MODULE)),
|
||||||
LABEL(Trainer), 0, TRAINER_CHANNELS_ROWS(), IF_TRAINER_ON(2)});
|
LABEL(Trainer), 0, TRAINER_CHANNELS_ROWS(), IF_TRAINER_ON(2)});
|
||||||
#else
|
#else
|
||||||
MENU_TAB({ 0, 0, TIMERS_ROWS, 0, 1, 0, 0, LABEL(Throttle), 0, 0, 0, LABEL(PreflightCheck), 0, 0, SW_WARN_ITEMS(), POT_WARN_ITEMS(), NAVIGATION_LINE_BY_LINE|(NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1), 0, LABEL(InternalModule), 0, IF_INTERNAL_MODULE_ON(1), IF_INTERNAL_MODULE_ON(IS_D8_RX(0) ? (uint8_t)1 : (uint8_t)2), IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), LABEL(ExternalModule), (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, EXTERNAL_MODULE_CHANNELS_ROWS(), (IS_MODULE_XJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, IF_EXTERNAL_MODULE_XJT(FAILSAFE_ROWS(EXTERNAL_MODULE)), LABEL(Trainer), 0, TRAINER_CHANNELS_ROWS(), IF_TRAINER_ON(2)});
|
MENU_TAB({ 0, 0, TIMERS_ROWS, 0, 1, 0, 0, LABEL(Throttle), 0, 0, 0, LABEL(PreflightCheck), 0, 0, SW_WARN_ITEMS(), POT_WARN_ITEMS(), NAVIGATION_LINE_BY_LINE|(NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1), 0, LABEL(InternalModule), 0, IF_INTERNAL_MODULE_ON(1), IF_INTERNAL_MODULE_ON(HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[0].rfProtocol) ? (uint8_t)2 : (uint8_t)1), IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), LABEL(ExternalModule), EXTERNAL_MODULE_MODE_ROWS, EXTERNAL_MODULE_CHANNELS_ROWS, (IS_MODULE_XJT(EXTERNAL_MODULE) && !HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[EXTERNAL_MODULE].rfProtocol)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, IF_EXTERNAL_MODULE_XJT(FAILSAFE_ROWS(EXTERNAL_MODULE)), LABEL(Trainer), 0, TRAINER_CHANNELS_ROWS(), IF_TRAINER_ON(2)});
|
||||||
#endif
|
#endif
|
||||||
MENU_CHECK(STR_MENUSETUP, menuTabModel, e_ModelSetup, ITEM_MODEL_SETUP_MAX);
|
MENU_CHECK(STR_MENUSETUP, menuTabModel, e_ModelSetup, ITEM_MODEL_SETUP_MAX);
|
||||||
|
|
||||||
|
@ -745,7 +750,7 @@ void menuModelSetup(uint8_t event)
|
||||||
else {
|
else {
|
||||||
horzpos_t l_posHorz = m_posHorz;
|
horzpos_t l_posHorz = m_posHorz;
|
||||||
coord_t xOffsetBind = MODEL_SETUP_BIND_OFS;
|
coord_t xOffsetBind = MODEL_SETUP_BIND_OFS;
|
||||||
if (IS_MODULE_XJT(moduleIdx) && IS_D8_RX(moduleIdx)) {
|
if (IS_MODULE_XJT(moduleIdx) && !HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[moduleIdx].rfProtocol)) {
|
||||||
xOffsetBind = 0;
|
xOffsetBind = 0;
|
||||||
lcd_putsLeft(y, INDENT "Receiver");
|
lcd_putsLeft(y, INDENT "Receiver");
|
||||||
if (attr) l_posHorz += 1;
|
if (attr) l_posHorz += 1;
|
||||||
|
|
|
@ -2017,11 +2017,21 @@ enum Protocols {
|
||||||
enum RFProtocols {
|
enum RFProtocols {
|
||||||
RF_PROTO_OFF = -1,
|
RF_PROTO_OFF = -1,
|
||||||
RF_PROTO_X16,
|
RF_PROTO_X16,
|
||||||
|
#if defined(MODULE_D16_EU_ONLY_SUPPORT)
|
||||||
|
RF_PROTO_LAST = RF_PROTO_X16
|
||||||
|
#else
|
||||||
RF_PROTO_D8,
|
RF_PROTO_D8,
|
||||||
RF_PROTO_LR12,
|
RF_PROTO_LR12,
|
||||||
RF_PROTO_LAST = RF_PROTO_LR12
|
RF_PROTO_LAST = RF_PROTO_LR12
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if defined(MODULE_D16_EU_ONLY_SUPPORT)
|
||||||
|
#define HAS_RF_PROTOCOL_FAILSAFE(protocol) ((protocol) == RF_PROTO_X16)
|
||||||
|
#else
|
||||||
|
#define HAS_RF_PROTOCOL_FAILSAFE(protocol) ((protocol) == RF_PROTO_X16 || (protocol) == RF_PROTO_LR12)
|
||||||
|
#endif
|
||||||
|
|
||||||
enum DSM2Protocols {
|
enum DSM2Protocols {
|
||||||
DSM2_PROTO_LP45,
|
DSM2_PROTO_LP45,
|
||||||
DSM2_PROTO_DSM2,
|
DSM2_PROTO_DSM2,
|
||||||
|
|
|
@ -1038,7 +1038,7 @@ void checkFailsafe()
|
||||||
for (int i=0; i<NUM_MODULES; i++) {
|
for (int i=0; i<NUM_MODULES; i++) {
|
||||||
if (IS_MODULE_XJT(i)) {
|
if (IS_MODULE_XJT(i)) {
|
||||||
ModuleData & moduleData = g_model.moduleData[i];
|
ModuleData & moduleData = g_model.moduleData[i];
|
||||||
if ((moduleData.rfProtocol == RF_PROTO_X16 || moduleData.rfProtocol == RF_PROTO_LR12) && moduleData.failsafeMode == FAILSAFE_NOT_SET) {
|
if (HAS_RF_PROTOCOL_FAILSAFE(moduleData.rfProtocol) && moduleData.failsafeMode == FAILSAFE_NOT_SET) {
|
||||||
ALERT(STR_FAILSAFEWARN, STR_NO_FAILSAFE, AU_ERROR);
|
ALERT(STR_FAILSAFEWARN, STR_NO_FAILSAFE, AU_ERROR);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue