From 3108b450b37d97612e7bb01de216b0365a826099 Mon Sep 17 00:00:00 2001 From: Cedric Marzer Date: Thu, 14 May 2015 22:27:54 +0200 Subject: [PATCH 01/12] PPM internal module GUI added --- radio/src/Makefile | 6 +-- radio/src/eeprom_conversions.cpp | 1 + radio/src/gui/Taranis/menu_model_setup.cpp | 59 ++++++++++++++++++++-- radio/src/myeeprom.h | 2 +- radio/src/opentx.h | 9 +++- radio/src/pulses/pulses_arm.cpp | 14 +++++ 6 files changed, 80 insertions(+), 11 deletions(-) diff --git a/radio/src/Makefile b/radio/src/Makefile index bad13cb73..ffa521865 100644 --- a/radio/src/Makefile +++ b/radio/src/Makefile @@ -52,10 +52,10 @@ DELAY = 5 # PCB version # Values: 9X, 9X128, 9X2561, 9XR, 9XR128, 9XR2561, GRUVIN9X, MEGA2560, SKY9X, 9XRPRO, TARANIS # Old values STD and STD128 are mapped to 9X and 9X128 for compatibility -PCB = 9X +PCB = TARANIS # PCB revision -PCBREV = +PCBREV = REVPLUS # Enable JETI-Telemetry or FrSky Telemetry reception on UART0 # For this option you need to modify your hardware! @@ -339,7 +339,7 @@ LCD_DUAL_BUFFER = NO # Notice: enabling this only enable code in the driver, # the menu selection is still not possible. # Values = NO, YES -TARANIS_INTERNAL_PPM = NO +TARANIS_INTERNAL_PPM = YES # Enable disk IO simulation in simulator # Simulator will use FatFs module and simulated IO layer that diff --git a/radio/src/eeprom_conversions.cpp b/radio/src/eeprom_conversions.cpp index bb58582a0..a0c1e7f2f 100644 --- a/radio/src/eeprom_conversions.cpp +++ b/radio/src/eeprom_conversions.cpp @@ -567,6 +567,7 @@ PACK(typedef struct { #if defined(PCBTARANIS) #define MODELDATA_EXTRA_216 \ uint8_t externalModule; \ + uint8_t internalModule; \ uint8_t trainerMode; \ ModuleData moduleData[NUM_MODULES+1]; \ char curveNames[MAX_CURVES][6]; \ diff --git a/radio/src/gui/Taranis/menu_model_setup.cpp b/radio/src/gui/Taranis/menu_model_setup.cpp index 296f3f165..e23878c85 100644 --- a/radio/src/gui/Taranis/menu_model_setup.cpp +++ b/radio/src/gui/Taranis/menu_model_setup.cpp @@ -190,7 +190,11 @@ int getSwitchWarningsCount() void menuModelSetup(uint8_t event) { horzpos_t l_posHorz = m_posHorz; +#if defined(TARANIS_INTERNAL_PPM) + #define IF_INTERNAL_MODULE_ON(x) (g_model.internalModule == 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.externalModule == 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) @@ -216,8 +220,22 @@ void menuModelSetup(uint8_t event) #define POT_WARN_ITEMS() uint8_t(g_model.potsWarnMode ? NAVIGATION_LINE_BY_LINE|NUM_POTS : 0) #endif bool CURSOR_ON_CELL = (m_posHorz >= 0); +#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(), NAVIGATION_LINE_BY_LINE|(NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1), 0, +LABEL(InternalModule), +(IS_MODULE_XJT(INTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, +IF_INTERNAL_MODULE_ON(INTERNAL_MODULE_CHANNELS_ROWS()), +IF_INTERNAL_MODULE_ON(IS_MODULE_XJT(INTERNAL_MODULE) && IS_D8_RX(INTERNAL_MODULE) ? (uint8_t)1 : (IS_MODULE_PPM(INTERNAL_MODULE) || IS_MODULE_XJT(INTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW), +IF_INTERNAL_MODULE_ON((IS_MODULE_XJT(INTERNAL_MODULE)) ? FAILSAFE_ROWS(INTERNAL_MODULE) : HIDDEN_ROW), +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)}); +#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)}); - +#endif MENU_CHECK(STR_MENUSETUP, menuTabModel, e_ModelSetup, ITEM_MODEL_SETUP_MAX); #if (defined(DSM2) || defined(PXX)) @@ -570,9 +588,40 @@ void menuModelSetup(uint8_t event) if (attr) g_model.noGlobalFunctions = !checkIncDecModel(event, !g_model.noGlobalFunctions, 0, 1); break; - case ITEM_MODEL_INTERNAL_MODULE_LABEL: - lcd_putsLeft(y, TR_INTERNALRF); + case ITEM_MODEL_INTERNAL_MODULE_LABEL: + lcd_putsLeft(y, TR_INTERNALRF); + break; +#if defined(TARANIS_INTERNAL_PPM) + case ITEM_MODEL_INTERNAL_MODULE_MODE: + lcd_putsLeft(y, STR_MODE); + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_TARANIS_PROTOCOLS, g_model.internalModule, m_posHorz==0 ? attr : 0); + if (IS_MODULE_XJT(INTERNAL_MODULE)) + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[INTERNAL_MODULE].rfProtocol, m_posHorz==1 ? attr : 0); + if (attr && s_editMode>0) { + switch (m_posHorz) { + case 0: + g_model.internalModule = checkIncDec(event, g_model.internalModule, MODULE_TYPE_NONE, MODULE_TYPE_COUNT-2, EE_MODEL, isModuleAvailable); + if (checkIncDec_Ret) { + g_model.moduleData[INTERNAL_MODULE].rfProtocol = 0; + g_model.moduleData[INTERNAL_MODULE].channelsStart = 0; + if (g_model.internalModule == MODULE_TYPE_PPM) + g_model.moduleData[INTERNAL_MODULE].channelsCount = 0; + else + g_model.moduleData[INTERNAL_MODULE].channelsCount = MAX_INTERNAL_MODULE_CHANNELS(); + } + break; + case 1: + + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, RF_PROTO_X16, RF_PROTO_LAST); + if (checkIncDec_Ret) { + g_model.moduleData[INTERNAL_MODULE].channelsStart = 0; + g_model.moduleData[INTERNAL_MODULE].channelsCount = MAX_INTERNAL_MODULE_CHANNELS(); + } + } + } break; +#else + case ITEM_MODEL_INTERNAL_MODULE_MODE: lcd_putsLeft(y, STR_MODE); @@ -585,7 +634,7 @@ void menuModelSetup(uint8_t event) } } break; - +#endif case ITEM_MODEL_TRAINER_MODE: g_model.trainerMode = selectMenuItem(MODEL_SETUP_2ND_COLUMN, y, STR_MODE, STR_VTRAINERMODES, g_model.trainerMode, 0, HAS_WIRELESS_TRAINER_HARDWARE() ? TRAINER_MODE_MASTER_BATTERY_COMPARTMENT : TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE, attr, event); break; @@ -650,7 +699,7 @@ void menuModelSetup(uint8_t event) break; case 1: CHECK_INCDEC_MODELVAR(event, moduleData.channelsCount, -4, min(MAX_CHANNELS(moduleIdx), 32-8-moduleData.channelsStart)); - if ((k == ITEM_MODEL_EXTERNAL_MODULE_CHANNELS && g_model.externalModule == MODULE_TYPE_PPM) || (k == ITEM_MODEL_TRAINER_CHANNELS)) { + if ((k == ITEM_MODEL_EXTERNAL_MODULE_CHANNELS && g_model.externalModule == MODULE_TYPE_PPM) || (k == ITEM_MODEL_INTERNAL_MODULE_CHANNELS && g_model.internalModule == MODULE_TYPE_PPM) || (k == ITEM_MODEL_TRAINER_CHANNELS)) { SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx); } break; diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 6d922911e..331a9bd29 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -448,7 +448,7 @@ PACK(typedef struct { }; #define IS_TRAINER_EXTERNAL_MODULE() (g_model.trainerMode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || g_model.trainerMode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) #define MODELDATA_BITMAP char bitmap[LEN_BITMAP_NAME]; - #define MODELDATA_EXTRA uint8_t externalModule:3; uint8_t trainerMode:3; uint8_t potsWarnMode:2; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][LEN_INPUT_NAME]; uint8_t potsWarnEnabled; int8_t potsWarnPosition[NUM_POTS]; + #define MODELDATA_EXTRA uint8_t externalModule:3; uint8_t internalModule:3; uint8_t trainerMode:3; uint8_t potsWarnMode:2; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][LEN_INPUT_NAME]; uint8_t potsWarnEnabled; int8_t potsWarnPosition[NUM_POTS]; #elif defined(PCBSKY9X) enum ModuleIndex { EXTERNAL_MODULE, diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 268c75e63..f933f4e55 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -462,14 +462,19 @@ extern void boardInit(); #endif #if defined(PCBTARANIS) + #if defined(TARANIS_INTERNAL_PPM) + #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_PPM)|| (idx==INTERNAL_MODULE && g_model.internalModule==MODULE_TYPE_PPM)) + #define IS_MODULE_XJT(idx) (((idx==INTERNAL_MODULE && g_model.internalModule==MODULE_TYPE_XJT)|| (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_XJT)) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) + #else #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_PPM)) - #define IS_MODULE_XJT(idx) ((idx==INTERNAL_MODULE || g_model.externalModule==MODULE_TYPE_XJT) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) + #define IS_MODULE_XJT(idx) (((idx==INTERNAL_MODULE && g_model.internalModule==MODULE_TYPE_XJT)|| (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_XJT)) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) + #endif #if defined(DSM2) #define IS_MODULE_DSM2(idx) (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_DSM2) #else #define IS_MODULE_DSM2(idx) (false) #endif - #define MAX_INTERNAL_MODULE_CHANNELS() (maxChannelsXJT[1+g_model.moduleData[INTERNAL_MODULE].rfProtocol]) + #define MAX_INTERNAL_MODULE_CHANNELS() ((g_model.internalModule == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[0].rfProtocol] : maxChannelsModules[g_model.internalModule]) #define MAX_EXTERNAL_MODULE_CHANNELS() ((g_model.externalModule == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[1].rfProtocol] : maxChannelsModules[g_model.externalModule]) #define MAX_CHANNELS(idx) (idx==INTERNAL_MODULE ? MAX_INTERNAL_MODULE_CHANNELS() : (idx==EXTERNAL_MODULE ? MAX_EXTERNAL_MODULE_CHANNELS() : MAX_TRAINER_CHANNELS())) #elif defined(PCBSKY9X) && !defined(REVA) && !defined(REVX) diff --git a/radio/src/pulses/pulses_arm.cpp b/radio/src/pulses/pulses_arm.cpp index 833e58b5f..fd8b5d3aa 100644 --- a/radio/src/pulses/pulses_arm.cpp +++ b/radio/src/pulses/pulses_arm.cpp @@ -53,7 +53,21 @@ void setupPulses(unsigned int port) switch (port) { #if defined(PCBTARANIS) case INTERNAL_MODULE: +#if defined(TARANIS_INTERNAL_PPM) + switch (g_model.internalModule) { + case MODULE_TYPE_PPM: + required_protocol = PROTO_PPM; + break; + case MODULE_TYPE_XJT: + required_protocol = PROTO_PXX; + break; + default: + required_protocol = PROTO_NONE; + break; + } +#else required_protocol = g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF ? PROTO_NONE : PROTO_PXX; +#endif break; #endif From bab05340cfee6d143fe761b93efca23fd65396dc Mon Sep 17 00:00:00 2001 From: Cedric Marzer Date: Thu, 14 May 2015 22:43:49 +0200 Subject: [PATCH 02/12] issue_2306_fixed --- radio/src/Makefile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/radio/src/Makefile b/radio/src/Makefile index ffa521865..0698822d5 100644 --- a/radio/src/Makefile +++ b/radio/src/Makefile @@ -52,10 +52,10 @@ DELAY = 5 # PCB version # Values: 9X, 9X128, 9X2561, 9XR, 9XR128, 9XR2561, GRUVIN9X, MEGA2560, SKY9X, 9XRPRO, TARANIS # Old values STD and STD128 are mapped to 9X and 9X128 for compatibility -PCB = TARANIS +PCB = 9X # PCB revision -PCBREV = REVPLUS +PCBREV = # Enable JETI-Telemetry or FrSky Telemetry reception on UART0 # For this option you need to modify your hardware! @@ -336,8 +336,7 @@ TRACE_AUDIO = NO LCD_DUAL_BUFFER = NO # Enable internal module PPM mode for Taranis -# Notice: enabling this only enable code in the driver, -# the menu selection is still not possible. + # Values = NO, YES TARANIS_INTERNAL_PPM = YES From 501b71216348cfd3cd1284eddc4efaf0c7cc7596 Mon Sep 17 00:00:00 2001 From: Cedric Marzer Date: Thu, 14 May 2015 23:11:23 +0200 Subject: [PATCH 03/12] Changed some stuff after bsongis kind review. --- radio/src/Makefile | 2 +- radio/src/eeprom_conversions.cpp | 1 - radio/src/gui/Taranis/menu_model_setup.cpp | 25 +++++++++++----------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/radio/src/Makefile b/radio/src/Makefile index 0698822d5..fb0cd50f3 100644 --- a/radio/src/Makefile +++ b/radio/src/Makefile @@ -338,7 +338,7 @@ LCD_DUAL_BUFFER = NO # Enable internal module PPM mode for Taranis # Values = NO, YES -TARANIS_INTERNAL_PPM = YES +TARANIS_INTERNAL_PPM = NO # Enable disk IO simulation in simulator # Simulator will use FatFs module and simulated IO layer that diff --git a/radio/src/eeprom_conversions.cpp b/radio/src/eeprom_conversions.cpp index a0c1e7f2f..bb58582a0 100644 --- a/radio/src/eeprom_conversions.cpp +++ b/radio/src/eeprom_conversions.cpp @@ -567,7 +567,6 @@ PACK(typedef struct { #if defined(PCBTARANIS) #define MODELDATA_EXTRA_216 \ uint8_t externalModule; \ - uint8_t internalModule; \ uint8_t trainerMode; \ ModuleData moduleData[NUM_MODULES+1]; \ char curveNames[MAX_CURVES][6]; \ diff --git a/radio/src/gui/Taranis/menu_model_setup.cpp b/radio/src/gui/Taranis/menu_model_setup.cpp index e23878c85..bb888badf 100644 --- a/radio/src/gui/Taranis/menu_model_setup.cpp +++ b/radio/src/gui/Taranis/menu_model_setup.cpp @@ -221,18 +221,19 @@ void menuModelSetup(uint8_t event) #endif bool CURSOR_ON_CELL = (m_posHorz >= 0); #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(), NAVIGATION_LINE_BY_LINE|(NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1), 0, -LABEL(InternalModule), -(IS_MODULE_XJT(INTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, -IF_INTERNAL_MODULE_ON(INTERNAL_MODULE_CHANNELS_ROWS()), -IF_INTERNAL_MODULE_ON(IS_MODULE_XJT(INTERNAL_MODULE) && IS_D8_RX(INTERNAL_MODULE) ? (uint8_t)1 : (IS_MODULE_PPM(INTERNAL_MODULE) || IS_MODULE_XJT(INTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW), -IF_INTERNAL_MODULE_ON((IS_MODULE_XJT(INTERNAL_MODULE)) ? FAILSAFE_ROWS(INTERNAL_MODULE) : HIDDEN_ROW), -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), + (IS_MODULE_XJT(INTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, + IF_INTERNAL_MODULE_ON(INTERNAL_MODULE_CHANNELS_ROWS()), + IF_INTERNAL_MODULE_ON(IS_MODULE_XJT(INTERNAL_MODULE) && IS_D8_RX(INTERNAL_MODULE) ? (uint8_t)1 : (IS_MODULE_PPM(INTERNAL_MODULE) || IS_MODULE_XJT(INTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW), + IF_INTERNAL_MODULE_ON((IS_MODULE_XJT(INTERNAL_MODULE)) ? FAILSAFE_ROWS(INTERNAL_MODULE) : HIDDEN_ROW), + 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)}); #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)}); #endif From a54e1605baebd60bd17d49bcfb85f84129d90582 Mon Sep 17 00:00:00 2001 From: Cedric Marzer Date: Thu, 14 May 2015 22:27:54 +0200 Subject: [PATCH 04/12] PPM internal module GUI added --- radio/src/Makefile | 6 +-- radio/src/eeprom_conversions.cpp | 1 + radio/src/gui/Taranis/menu_model_setup.cpp | 59 ++++++++++++++++++++-- radio/src/myeeprom.h | 2 +- radio/src/opentx.h | 9 +++- radio/src/pulses/pulses_arm.cpp | 14 +++++ 6 files changed, 80 insertions(+), 11 deletions(-) diff --git a/radio/src/Makefile b/radio/src/Makefile index be8eb81f8..65d918ffe 100644 --- a/radio/src/Makefile +++ b/radio/src/Makefile @@ -52,10 +52,10 @@ DELAY = 5 # PCB version # Values: 9X, 9X128, 9X2561, 9XR, 9XR128, 9XR2561, GRUVIN9X, MEGA2560, SKY9X, 9XRPRO, TARANIS # Old values STD and STD128 are mapped to 9X and 9X128 for compatibility -PCB = 9X +PCB = TARANIS # PCB revision -PCBREV = +PCBREV = REVPLUS # Enable JETI-Telemetry or FrSky Telemetry reception on UART0 # For this option you need to modify your hardware! @@ -339,7 +339,7 @@ LCD_DUAL_BUFFER = NO # Notice: enabling this only enable code in the driver, # the menu selection is still not possible. # Values = NO, YES -TARANIS_INTERNAL_PPM = NO +TARANIS_INTERNAL_PPM = YES # Enable disk IO simulation in simulator # Simulator will use FatFs module and simulated IO layer that diff --git a/radio/src/eeprom_conversions.cpp b/radio/src/eeprom_conversions.cpp index bb58582a0..a0c1e7f2f 100644 --- a/radio/src/eeprom_conversions.cpp +++ b/radio/src/eeprom_conversions.cpp @@ -567,6 +567,7 @@ PACK(typedef struct { #if defined(PCBTARANIS) #define MODELDATA_EXTRA_216 \ uint8_t externalModule; \ + uint8_t internalModule; \ uint8_t trainerMode; \ ModuleData moduleData[NUM_MODULES+1]; \ char curveNames[MAX_CURVES][6]; \ diff --git a/radio/src/gui/Taranis/menu_model_setup.cpp b/radio/src/gui/Taranis/menu_model_setup.cpp index 2c27e83e6..59ec391a3 100644 --- a/radio/src/gui/Taranis/menu_model_setup.cpp +++ b/radio/src/gui/Taranis/menu_model_setup.cpp @@ -190,7 +190,11 @@ int getSwitchWarningsCount() void menuModelSetup(uint8_t event) { horzpos_t l_posHorz = m_posHorz; +#if defined(TARANIS_INTERNAL_PPM) + #define IF_INTERNAL_MODULE_ON(x) (g_model.internalModule == 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.externalModule == 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) @@ -216,8 +220,22 @@ void menuModelSetup(uint8_t event) #define POT_WARN_ITEMS() uint8_t(g_model.potsWarnMode ? NAVIGATION_LINE_BY_LINE|NUM_POTS : 0) #endif bool CURSOR_ON_CELL = (m_posHorz >= 0); +#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(), NAVIGATION_LINE_BY_LINE|(NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1), 0, +LABEL(InternalModule), +(IS_MODULE_XJT(INTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, +IF_INTERNAL_MODULE_ON(INTERNAL_MODULE_CHANNELS_ROWS()), +IF_INTERNAL_MODULE_ON(IS_MODULE_XJT(INTERNAL_MODULE) && IS_D8_RX(INTERNAL_MODULE) ? (uint8_t)1 : (IS_MODULE_PPM(INTERNAL_MODULE) || IS_MODULE_XJT(INTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW), +IF_INTERNAL_MODULE_ON((IS_MODULE_XJT(INTERNAL_MODULE)) ? FAILSAFE_ROWS(INTERNAL_MODULE) : HIDDEN_ROW), +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)}); +#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)}); - +#endif MENU_CHECK(STR_MENUSETUP, menuTabModel, e_ModelSetup, ITEM_MODEL_SETUP_MAX); #if (defined(DSM2) || defined(PXX)) @@ -570,9 +588,40 @@ void menuModelSetup(uint8_t event) if (attr) g_model.noGlobalFunctions = !checkIncDecModel(event, !g_model.noGlobalFunctions, 0, 1); break; - case ITEM_MODEL_INTERNAL_MODULE_LABEL: - lcd_putsLeft(y, TR_INTERNALRF); + case ITEM_MODEL_INTERNAL_MODULE_LABEL: + lcd_putsLeft(y, TR_INTERNALRF); + break; +#if defined(TARANIS_INTERNAL_PPM) + case ITEM_MODEL_INTERNAL_MODULE_MODE: + lcd_putsLeft(y, STR_MODE); + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_TARANIS_PROTOCOLS, g_model.internalModule, m_posHorz==0 ? attr : 0); + if (IS_MODULE_XJT(INTERNAL_MODULE)) + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[INTERNAL_MODULE].rfProtocol, m_posHorz==1 ? attr : 0); + if (attr && s_editMode>0) { + switch (m_posHorz) { + case 0: + g_model.internalModule = checkIncDec(event, g_model.internalModule, MODULE_TYPE_NONE, MODULE_TYPE_COUNT-2, EE_MODEL, isModuleAvailable); + if (checkIncDec_Ret) { + g_model.moduleData[INTERNAL_MODULE].rfProtocol = 0; + g_model.moduleData[INTERNAL_MODULE].channelsStart = 0; + if (g_model.internalModule == MODULE_TYPE_PPM) + g_model.moduleData[INTERNAL_MODULE].channelsCount = 0; + else + g_model.moduleData[INTERNAL_MODULE].channelsCount = MAX_INTERNAL_MODULE_CHANNELS(); + } + break; + case 1: + + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, RF_PROTO_X16, RF_PROTO_LAST); + if (checkIncDec_Ret) { + g_model.moduleData[INTERNAL_MODULE].channelsStart = 0; + g_model.moduleData[INTERNAL_MODULE].channelsCount = MAX_INTERNAL_MODULE_CHANNELS(); + } + } + } break; +#else + case ITEM_MODEL_INTERNAL_MODULE_MODE: lcd_putsLeft(y, STR_MODE); @@ -585,7 +634,7 @@ void menuModelSetup(uint8_t event) } } break; - +#endif case ITEM_MODEL_TRAINER_MODE: g_model.trainerMode = selectMenuItem(MODEL_SETUP_2ND_COLUMN, y, STR_MODE, STR_VTRAINERMODES, g_model.trainerMode, 0, HAS_WIRELESS_TRAINER_HARDWARE() ? TRAINER_MODE_MASTER_BATTERY_COMPARTMENT : TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE, attr, event); break; @@ -650,7 +699,7 @@ void menuModelSetup(uint8_t event) break; case 1: CHECK_INCDEC_MODELVAR(event, moduleData.channelsCount, -4, min(MAX_CHANNELS(moduleIdx), 32-8-moduleData.channelsStart)); - if ((k == ITEM_MODEL_EXTERNAL_MODULE_CHANNELS && g_model.externalModule == MODULE_TYPE_PPM) || (k == ITEM_MODEL_TRAINER_CHANNELS)) { + if ((k == ITEM_MODEL_EXTERNAL_MODULE_CHANNELS && g_model.externalModule == MODULE_TYPE_PPM) || (k == ITEM_MODEL_INTERNAL_MODULE_CHANNELS && g_model.internalModule == MODULE_TYPE_PPM) || (k == ITEM_MODEL_TRAINER_CHANNELS)) { SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx); } break; diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 715f8d0fb..ed3729571 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -467,7 +467,7 @@ PACK(typedef struct { }; #define IS_TRAINER_EXTERNAL_MODULE() (g_model.trainerMode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || g_model.trainerMode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) #define MODELDATA_BITMAP char bitmap[LEN_BITMAP_NAME]; - #define MODELDATA_EXTRA uint8_t externalModule:3; uint8_t trainerMode:3; uint8_t potsWarnMode:2; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][LEN_INPUT_NAME]; uint8_t potsWarnEnabled; int8_t potsWarnPosition[NUM_POTS]; + #define MODELDATA_EXTRA uint8_t externalModule:3; uint8_t internalModule:3; uint8_t trainerMode:3; uint8_t potsWarnMode:2; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][LEN_INPUT_NAME]; uint8_t potsWarnEnabled; int8_t potsWarnPosition[NUM_POTS]; #elif defined(PCBSKY9X) enum ModuleIndex { EXTERNAL_MODULE, diff --git a/radio/src/opentx.h b/radio/src/opentx.h index ce2421518..59fb543d1 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -462,14 +462,19 @@ extern void boardInit(); #endif #if defined(PCBTARANIS) + #if defined(TARANIS_INTERNAL_PPM) + #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_PPM)|| (idx==INTERNAL_MODULE && g_model.internalModule==MODULE_TYPE_PPM)) + #define IS_MODULE_XJT(idx) (((idx==INTERNAL_MODULE && g_model.internalModule==MODULE_TYPE_XJT)|| (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_XJT)) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) + #else #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_PPM)) - #define IS_MODULE_XJT(idx) ((idx==INTERNAL_MODULE || g_model.externalModule==MODULE_TYPE_XJT) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) + #define IS_MODULE_XJT(idx) (((idx==INTERNAL_MODULE && g_model.internalModule==MODULE_TYPE_XJT)|| (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_XJT)) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) + #endif #if defined(DSM2) #define IS_MODULE_DSM2(idx) (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_DSM2) #else #define IS_MODULE_DSM2(idx) (false) #endif - #define MAX_INTERNAL_MODULE_CHANNELS() (maxChannelsXJT[1+g_model.moduleData[INTERNAL_MODULE].rfProtocol]) + #define MAX_INTERNAL_MODULE_CHANNELS() ((g_model.internalModule == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[0].rfProtocol] : maxChannelsModules[g_model.internalModule]) #define MAX_EXTERNAL_MODULE_CHANNELS() ((g_model.externalModule == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[1].rfProtocol] : maxChannelsModules[g_model.externalModule]) #define MAX_CHANNELS(idx) (idx==INTERNAL_MODULE ? MAX_INTERNAL_MODULE_CHANNELS() : (idx==EXTERNAL_MODULE ? MAX_EXTERNAL_MODULE_CHANNELS() : MAX_TRAINER_CHANNELS())) #elif defined(PCBSKY9X) && !defined(REVA) && !defined(REVX) diff --git a/radio/src/pulses/pulses_arm.cpp b/radio/src/pulses/pulses_arm.cpp index 833e58b5f..fd8b5d3aa 100644 --- a/radio/src/pulses/pulses_arm.cpp +++ b/radio/src/pulses/pulses_arm.cpp @@ -53,7 +53,21 @@ void setupPulses(unsigned int port) switch (port) { #if defined(PCBTARANIS) case INTERNAL_MODULE: +#if defined(TARANIS_INTERNAL_PPM) + switch (g_model.internalModule) { + case MODULE_TYPE_PPM: + required_protocol = PROTO_PPM; + break; + case MODULE_TYPE_XJT: + required_protocol = PROTO_PXX; + break; + default: + required_protocol = PROTO_NONE; + break; + } +#else required_protocol = g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF ? PROTO_NONE : PROTO_PXX; +#endif break; #endif From 9de8cefa79bf08640a07b9ffe6c8981ce5ce39f0 Mon Sep 17 00:00:00 2001 From: Cedric Marzer Date: Thu, 14 May 2015 22:43:49 +0200 Subject: [PATCH 05/12] issue_2306_fixed --- radio/src/Makefile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/radio/src/Makefile b/radio/src/Makefile index 65d918ffe..c297425d9 100644 --- a/radio/src/Makefile +++ b/radio/src/Makefile @@ -52,10 +52,10 @@ DELAY = 5 # PCB version # Values: 9X, 9X128, 9X2561, 9XR, 9XR128, 9XR2561, GRUVIN9X, MEGA2560, SKY9X, 9XRPRO, TARANIS # Old values STD and STD128 are mapped to 9X and 9X128 for compatibility -PCB = TARANIS +PCB = 9X # PCB revision -PCBREV = REVPLUS +PCBREV = # Enable JETI-Telemetry or FrSky Telemetry reception on UART0 # For this option you need to modify your hardware! @@ -336,8 +336,7 @@ TRACE_AUDIO = NO LCD_DUAL_BUFFER = NO # Enable internal module PPM mode for Taranis -# Notice: enabling this only enable code in the driver, -# the menu selection is still not possible. + # Values = NO, YES TARANIS_INTERNAL_PPM = YES From 520df52951d7cab5afa4546c068fc02ce35e3df2 Mon Sep 17 00:00:00 2001 From: Cedric Marzer Date: Thu, 14 May 2015 23:11:23 +0200 Subject: [PATCH 06/12] Changed some stuff after bsongis kind review. --- radio/src/Makefile | 2 +- radio/src/eeprom_conversions.cpp | 1 - radio/src/gui/Taranis/menu_model_setup.cpp | 25 +++++++++++----------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/radio/src/Makefile b/radio/src/Makefile index c297425d9..890a28833 100644 --- a/radio/src/Makefile +++ b/radio/src/Makefile @@ -338,7 +338,7 @@ LCD_DUAL_BUFFER = NO # Enable internal module PPM mode for Taranis # Values = NO, YES -TARANIS_INTERNAL_PPM = YES +TARANIS_INTERNAL_PPM = NO # Enable disk IO simulation in simulator # Simulator will use FatFs module and simulated IO layer that diff --git a/radio/src/eeprom_conversions.cpp b/radio/src/eeprom_conversions.cpp index a0c1e7f2f..bb58582a0 100644 --- a/radio/src/eeprom_conversions.cpp +++ b/radio/src/eeprom_conversions.cpp @@ -567,7 +567,6 @@ PACK(typedef struct { #if defined(PCBTARANIS) #define MODELDATA_EXTRA_216 \ uint8_t externalModule; \ - uint8_t internalModule; \ uint8_t trainerMode; \ ModuleData moduleData[NUM_MODULES+1]; \ char curveNames[MAX_CURVES][6]; \ diff --git a/radio/src/gui/Taranis/menu_model_setup.cpp b/radio/src/gui/Taranis/menu_model_setup.cpp index 59ec391a3..5942e8e07 100644 --- a/radio/src/gui/Taranis/menu_model_setup.cpp +++ b/radio/src/gui/Taranis/menu_model_setup.cpp @@ -221,18 +221,19 @@ void menuModelSetup(uint8_t event) #endif bool CURSOR_ON_CELL = (m_posHorz >= 0); #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(), NAVIGATION_LINE_BY_LINE|(NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1), 0, -LABEL(InternalModule), -(IS_MODULE_XJT(INTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, -IF_INTERNAL_MODULE_ON(INTERNAL_MODULE_CHANNELS_ROWS()), -IF_INTERNAL_MODULE_ON(IS_MODULE_XJT(INTERNAL_MODULE) && IS_D8_RX(INTERNAL_MODULE) ? (uint8_t)1 : (IS_MODULE_PPM(INTERNAL_MODULE) || IS_MODULE_XJT(INTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW), -IF_INTERNAL_MODULE_ON((IS_MODULE_XJT(INTERNAL_MODULE)) ? FAILSAFE_ROWS(INTERNAL_MODULE) : HIDDEN_ROW), -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), + (IS_MODULE_XJT(INTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, + IF_INTERNAL_MODULE_ON(INTERNAL_MODULE_CHANNELS_ROWS()), + IF_INTERNAL_MODULE_ON(IS_MODULE_XJT(INTERNAL_MODULE) && IS_D8_RX(INTERNAL_MODULE) ? (uint8_t)1 : (IS_MODULE_PPM(INTERNAL_MODULE) || IS_MODULE_XJT(INTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW), + IF_INTERNAL_MODULE_ON((IS_MODULE_XJT(INTERNAL_MODULE)) ? FAILSAFE_ROWS(INTERNAL_MODULE) : HIDDEN_ROW), + 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)}); #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)}); #endif From a2c7e788c5bbd177d22a1730feee471078b74a6b Mon Sep 17 00:00:00 2001 From: Cedric Marzer Date: Mon, 18 May 2015 21:39:59 +0200 Subject: [PATCH 07/12] More changes, most of them cosmetic --- radio/src/gui/Taranis/menu_model_setup.cpp | 59 ++++++++++------------ 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/radio/src/gui/Taranis/menu_model_setup.cpp b/radio/src/gui/Taranis/menu_model_setup.cpp index 5942e8e07..a0c54676f 100644 --- a/radio/src/gui/Taranis/menu_model_setup.cpp +++ b/radio/src/gui/Taranis/menu_model_setup.cpp @@ -591,39 +591,36 @@ void menuModelSetup(uint8_t event) case ITEM_MODEL_INTERNAL_MODULE_LABEL: lcd_putsLeft(y, TR_INTERNALRF); - break; + break; #if defined(TARANIS_INTERNAL_PPM) - case ITEM_MODEL_INTERNAL_MODULE_MODE: - lcd_putsLeft(y, STR_MODE); - lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_TARANIS_PROTOCOLS, g_model.internalModule, m_posHorz==0 ? attr : 0); - if (IS_MODULE_XJT(INTERNAL_MODULE)) - lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[INTERNAL_MODULE].rfProtocol, m_posHorz==1 ? attr : 0); - if (attr && s_editMode>0) { - switch (m_posHorz) { - case 0: - g_model.internalModule = checkIncDec(event, g_model.internalModule, MODULE_TYPE_NONE, MODULE_TYPE_COUNT-2, EE_MODEL, isModuleAvailable); - if (checkIncDec_Ret) { - g_model.moduleData[INTERNAL_MODULE].rfProtocol = 0; - g_model.moduleData[INTERNAL_MODULE].channelsStart = 0; - if (g_model.internalModule == MODULE_TYPE_PPM) - g_model.moduleData[INTERNAL_MODULE].channelsCount = 0; - else - g_model.moduleData[INTERNAL_MODULE].channelsCount = MAX_INTERNAL_MODULE_CHANNELS(); - } - break; - case 1: - - CHECK_INCDEC_MODELVAR(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, RF_PROTO_X16, RF_PROTO_LAST); - if (checkIncDec_Ret) { - g_model.moduleData[INTERNAL_MODULE].channelsStart = 0; - g_model.moduleData[INTERNAL_MODULE].channelsCount = MAX_INTERNAL_MODULE_CHANNELS(); - } - } - } - break; + case ITEM_MODEL_INTERNAL_MODULE_MODE: + lcd_putsLeft(y, STR_MODE); + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_TARANIS_PROTOCOLS, g_model.internalModule, m_posHorz==0 ? attr : 0); + if (IS_MODULE_XJT(INTERNAL_MODULE)) + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[INTERNAL_MODULE].rfProtocol, m_posHorz==1 ? attr : 0); + if (attr && s_editMode>0) { + switch (m_posHorz) { + case 0: + g_model.internalModule = checkIncDec(event, g_model.internalModule, MODULE_TYPE_NONE, MODULE_TYPE_COUNT-2, EE_MODEL, isModuleAvailable); + if (checkIncDec_Ret) { + g_model.moduleData[INTERNAL_MODULE].rfProtocol = 0; + g_model.moduleData[INTERNAL_MODULE].channelsStart = 0; + if (g_model.internalModule == MODULE_TYPE_PPM) + g_model.moduleData[INTERNAL_MODULE].channelsCount = 0; + else + g_model.moduleData[INTERNAL_MODULE].channelsCount = MAX_INTERNAL_MODULE_CHANNELS(); + } + break; + case 1: + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, RF_PROTO_X16, RF_PROTO_LAST); + if (checkIncDec_Ret) { + g_model.moduleData[INTERNAL_MODULE].channelsStart = 0; + g_model.moduleData[INTERNAL_MODULE].channelsCount = MAX_INTERNAL_MODULE_CHANNELS(); + } + } + } + break; #else - - case ITEM_MODEL_INTERNAL_MODULE_MODE: lcd_putsLeft(y, STR_MODE); lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[0].rfProtocol, attr); From 9a42cac6614d4570c8dea15992fa2b3d1bf4c207 Mon Sep 17 00:00:00 2001 From: Cedric Marzer Date: Mon, 18 May 2015 22:18:11 +0200 Subject: [PATCH 08/12] More changes --- radio/src/opentx.h | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 59fb543d1..18084f074 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -462,19 +462,23 @@ extern void boardInit(); #endif #if defined(PCBTARANIS) - #if defined(TARANIS_INTERNAL_PPM) - #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_PPM)|| (idx==INTERNAL_MODULE && g_model.internalModule==MODULE_TYPE_PPM)) - #define IS_MODULE_XJT(idx) (((idx==INTERNAL_MODULE && g_model.internalModule==MODULE_TYPE_XJT)|| (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_XJT)) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) + #if defined(TARANIS_INTERNAL_PPM) + #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==INTERNAL_MODULE && g_model.internalModule==MODULE_TYPE_PPM)|| (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_PPM)) + #define IS_MODULE_XJT(idx) (((idx==INTERNAL_MODULE && g_model.internalModule==MODULE_TYPE_XJT)|| (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_XJT)) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) #else - #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_PPM)) - #define IS_MODULE_XJT(idx) (((idx==INTERNAL_MODULE && g_model.internalModule==MODULE_TYPE_XJT)|| (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_XJT)) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) - #endif + #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_PPM)) + #define IS_MODULE_XJT(idx) ((idx==INTERNAL_MODULE || g_model.externalModule==MODULE_TYPE_XJT) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) + #endif #if defined(DSM2) #define IS_MODULE_DSM2(idx) (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_DSM2) #else #define IS_MODULE_DSM2(idx) (false) #endif - #define MAX_INTERNAL_MODULE_CHANNELS() ((g_model.internalModule == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[0].rfProtocol] : maxChannelsModules[g_model.internalModule]) + #if defined(TARANIS_INTERNAL_PPM) + #define MAX_INTERNAL_MODULE_CHANNELS() ((g_model.internalModule == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[0].rfProtocol] : maxChannelsModules[g_model.internalModule]) + #else + #define MAX_INTERNAL_MODULE_CHANNELS() (maxChannelsXJT[1+g_model.moduleData[INTERNAL_MODULE].rfProtocol]) + #endif #define MAX_EXTERNAL_MODULE_CHANNELS() ((g_model.externalModule == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[1].rfProtocol] : maxChannelsModules[g_model.externalModule]) #define MAX_CHANNELS(idx) (idx==INTERNAL_MODULE ? MAX_INTERNAL_MODULE_CHANNELS() : (idx==EXTERNAL_MODULE ? MAX_EXTERNAL_MODULE_CHANNELS() : MAX_TRAINER_CHANNELS())) #elif defined(PCBSKY9X) && !defined(REVA) && !defined(REVX) From 167734b7551a53cd5eb674c884b2adde1edb4d80 Mon Sep 17 00:00:00 2001 From: Cedric Marzer Date: Mon, 18 May 2015 22:26:57 +0200 Subject: [PATCH 09/12] more changes --- radio/src/gui/Taranis/menu_model_setup.cpp | 64 ++++++++++++---------- radio/src/myeeprom.h | 6 +- 2 files changed, 40 insertions(+), 30 deletions(-) diff --git a/radio/src/gui/Taranis/menu_model_setup.cpp b/radio/src/gui/Taranis/menu_model_setup.cpp index a0c54676f..4a92a3bad 100644 --- a/radio/src/gui/Taranis/menu_model_setup.cpp +++ b/radio/src/gui/Taranis/menu_model_setup.cpp @@ -589,37 +589,37 @@ void menuModelSetup(uint8_t event) if (attr) g_model.noGlobalFunctions = !checkIncDecModel(event, !g_model.noGlobalFunctions, 0, 1); break; - case ITEM_MODEL_INTERNAL_MODULE_LABEL: - lcd_putsLeft(y, TR_INTERNALRF); - break; + case ITEM_MODEL_INTERNAL_MODULE_LABEL: + lcd_putsLeft(y, TR_INTERNALRF); + break; #if defined(TARANIS_INTERNAL_PPM) - case ITEM_MODEL_INTERNAL_MODULE_MODE: - lcd_putsLeft(y, STR_MODE); - lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_TARANIS_PROTOCOLS, g_model.internalModule, m_posHorz==0 ? attr : 0); - if (IS_MODULE_XJT(INTERNAL_MODULE)) - lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[INTERNAL_MODULE].rfProtocol, m_posHorz==1 ? attr : 0); - if (attr && s_editMode>0) { - switch (m_posHorz) { - case 0: - g_model.internalModule = checkIncDec(event, g_model.internalModule, MODULE_TYPE_NONE, MODULE_TYPE_COUNT-2, EE_MODEL, isModuleAvailable); - if (checkIncDec_Ret) { - g_model.moduleData[INTERNAL_MODULE].rfProtocol = 0; - g_model.moduleData[INTERNAL_MODULE].channelsStart = 0; - if (g_model.internalModule == MODULE_TYPE_PPM) - g_model.moduleData[INTERNAL_MODULE].channelsCount = 0; - else - g_model.moduleData[INTERNAL_MODULE].channelsCount = MAX_INTERNAL_MODULE_CHANNELS(); - } - break; - case 1: - CHECK_INCDEC_MODELVAR(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, RF_PROTO_X16, RF_PROTO_LAST); - if (checkIncDec_Ret) { + case ITEM_MODEL_INTERNAL_MODULE_MODE: + lcd_putsLeft(y, STR_MODE); + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_TARANIS_PROTOCOLS, g_model.internalModule, m_posHorz==0 ? attr : 0); + if (IS_MODULE_XJT(INTERNAL_MODULE)) + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[INTERNAL_MODULE].rfProtocol, m_posHorz==1 ? attr : 0); + if (attr && s_editMode>0) { + switch (m_posHorz) { + case 0: + g_model.internalModule = checkIncDec(event, g_model.internalModule, MODULE_TYPE_NONE, MODULE_TYPE_COUNT-2, EE_MODEL, isModuleAvailable); + if (checkIncDec_Ret) { + g_model.moduleData[INTERNAL_MODULE].rfProtocol = 0; g_model.moduleData[INTERNAL_MODULE].channelsStart = 0; - g_model.moduleData[INTERNAL_MODULE].channelsCount = MAX_INTERNAL_MODULE_CHANNELS(); - } - } - } - break; + if (g_model.internalModule == MODULE_TYPE_PPM) + g_model.moduleData[INTERNAL_MODULE].channelsCount = 0; + else + g_model.moduleData[INTERNAL_MODULE].channelsCount = MAX_INTERNAL_MODULE_CHANNELS(); + } + break; + case 1: + CHECK_INCDEC_MODELVAR(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, RF_PROTO_X16, RF_PROTO_LAST); + if (checkIncDec_Ret) { + g_model.moduleData[INTERNAL_MODULE].channelsStart = 0; + g_model.moduleData[INTERNAL_MODULE].channelsCount = MAX_INTERNAL_MODULE_CHANNELS(); + } + } + } + break; #else case ITEM_MODEL_INTERNAL_MODULE_MODE: lcd_putsLeft(y, STR_MODE); @@ -697,9 +697,15 @@ void menuModelSetup(uint8_t event) break; case 1: CHECK_INCDEC_MODELVAR(event, moduleData.channelsCount, -4, min(MAX_CHANNELS(moduleIdx), 32-8-moduleData.channelsStart)); +#if defined(TARANIS_INTERNAL_PPM) if ((k == ITEM_MODEL_EXTERNAL_MODULE_CHANNELS && g_model.externalModule == MODULE_TYPE_PPM) || (k == ITEM_MODEL_INTERNAL_MODULE_CHANNELS && g_model.internalModule == MODULE_TYPE_PPM) || (k == ITEM_MODEL_TRAINER_CHANNELS)) { SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx); } +#else + if ((k == ITEM_MODEL_EXTERNAL_MODULE_CHANNELS && g_model.externalModule == MODULE_TYPE_PPM) || (k == ITEM_MODEL_TRAINER_CHANNELS)) { + SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx); + } +#endif break; } } diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index ed3729571..7bba038ec 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -467,7 +467,11 @@ PACK(typedef struct { }; #define IS_TRAINER_EXTERNAL_MODULE() (g_model.trainerMode == TRAINER_MODE_MASTER_SBUS_EXTERNAL_MODULE || g_model.trainerMode == TRAINER_MODE_MASTER_CPPM_EXTERNAL_MODULE) #define MODELDATA_BITMAP char bitmap[LEN_BITMAP_NAME]; - #define MODELDATA_EXTRA uint8_t externalModule:3; uint8_t internalModule:3; uint8_t trainerMode:3; uint8_t potsWarnMode:2; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][LEN_INPUT_NAME]; uint8_t potsWarnEnabled; int8_t potsWarnPosition[NUM_POTS]; + #if defined(TARANIS_INTERNAL_PPM) + #define MODELDATA_EXTRA uint8_t externalModule:3; uint8_t internalModule:3; uint8_t trainerMode:3; uint8_t potsWarnMode:2; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][LEN_INPUT_NAME]; uint8_t potsWarnEnabled; int8_t potsWarnPosition[NUM_POTS]; + #else + #define MODELDATA_EXTRA uint8_t externalModule:3; uint8_t trainerMode:3; uint8_t potsWarnMode:2; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][LEN_INPUT_NAME]; uint8_t potsWarnEnabled; int8_t potsWarnPosition[NUM_POTS]; + #endif #elif defined(PCBSKY9X) enum ModuleIndex { EXTERNAL_MODULE, From e8e8daff11eab395a63595aca71eec2cff83f8a1 Mon Sep 17 00:00:00 2001 From: Cedric Marzer Date: Tue, 26 May 2015 22:43:42 +0200 Subject: [PATCH 10/12] Changed internalModule to gmodel.moduleData[INTERNAL_MODULE].type --- radio/src/gui/Taranis/menu_model_setup.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/radio/src/gui/Taranis/menu_model_setup.cpp b/radio/src/gui/Taranis/menu_model_setup.cpp index c8b88c9af..e322c6953 100644 --- a/radio/src/gui/Taranis/menu_model_setup.cpp +++ b/radio/src/gui/Taranis/menu_model_setup.cpp @@ -191,9 +191,10 @@ void menuModelSetup(uint8_t event) { horzpos_t l_posHorz = m_posHorz; #if defined(TARANIS_INTERNAL_PPM) - #define IF_INTERNAL_MODULE_ON(x) (g_model.internalModule == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x)) + #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) @@ -594,17 +595,17 @@ void menuModelSetup(uint8_t event) #if defined(TARANIS_INTERNAL_PPM) case ITEM_MODEL_INTERNAL_MODULE_MODE: lcd_putsLeft(y, STR_MODE); - lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_TARANIS_PROTOCOLS, g_model.internalModule, m_posHorz==0 ? attr : 0); + lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN, y, STR_TARANIS_PROTOCOLS, g_model.moduleData[INTERNAL_MODULE].type, m_posHorz==0 ? attr : 0); if (IS_MODULE_XJT(INTERNAL_MODULE)) lcd_putsiAtt(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[INTERNAL_MODULE].rfProtocol, m_posHorz==1 ? attr : 0); if (attr && s_editMode>0) { switch (m_posHorz) { case 0: - g_model.internalModule = checkIncDec(event, g_model.internalModule, MODULE_TYPE_NONE, MODULE_TYPE_COUNT-2, EE_MODEL, isModuleAvailable); + g_model.moduleData[INTERNAL_MODULE].type = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].type, MODULE_TYPE_NONE, MODULE_TYPE_COUNT-2, EE_MODEL, isModuleAvailable); if (checkIncDec_Ret) { g_model.moduleData[INTERNAL_MODULE].rfProtocol = 0; g_model.moduleData[INTERNAL_MODULE].channelsStart = 0; - if (g_model.internalModule == MODULE_TYPE_PPM) + if (g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PPM) g_model.moduleData[INTERNAL_MODULE].channelsCount = 0; else g_model.moduleData[INTERNAL_MODULE].channelsCount = MAX_INTERNAL_MODULE_CHANNELS(); @@ -696,6 +697,12 @@ void menuModelSetup(uint8_t event) break; case 1: CHECK_INCDEC_MODELVAR(event, moduleData.channelsCount, -4, min(MAX_CHANNELS(moduleIdx), 32-8-moduleData.channelsStart)); + +#if defined(TARANIS_INTERNAL_PPM) + if ((k == ITEM_MODEL_EXTERNAL_MODULE_CHANNELS && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_INTERNAL_MODULE_CHANNELS && g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_TRAINER_CHANNELS)) { + SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx); + } +#else if ((k == ITEM_MODEL_EXTERNAL_MODULE_CHANNELS && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) || (k == ITEM_MODEL_TRAINER_CHANNELS)) { SET_DEFAULT_PPM_FRAME_LENGTH(moduleIdx); } From 2d7330d1bb772bce2ccf84348a6b41308747d310 Mon Sep 17 00:00:00 2001 From: Cedric Marzer Date: Tue, 26 May 2015 22:46:46 +0200 Subject: [PATCH 11/12] Changed internalModule to gmodel.moduleData[INTERNAL_MODULE].type --- radio/src/opentx.h | 12 ++++++------ radio/src/pulses/pulses_arm.cpp | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 4fbde84db..a646593e7 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -463,11 +463,11 @@ extern void boardInit(); #if defined(PCBTARANIS) #if defined(TARANIS_INTERNAL_PPM) - #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==INTERNAL_MODULE && g_model.internalModule==MODULE_TYPE_PPM)|| (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_PPM)) - #define IS_MODULE_XJT(idx) (((idx==INTERNAL_MODULE && g_model.internalModule==MODULE_TYPE_XJT)|| (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_XJT)) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) + #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==INTERNAL_MODULE && g_model.moduleData[INTERNAL_MODULE].type==MODULE_TYPE_PPM)|| (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_PPM)) + #define IS_MODULE_XJT(idx) (((idx==INTERNAL_MODULE && g_model.moduleData[INTERNAL_MODULE].type==MODULE_TYPE_XJT)|| (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_XJT)) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) #else - #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.externalModule==MODULE_TYPE_PPM)) - #define IS_MODULE_XJT(idx) ((idx==INTERNAL_MODULE || g_model.externalModule==MODULE_TYPE_XJT) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) + #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_PPM)) + #define IS_MODULE_XJT(idx) ((idx==INTERNAL_MODULE || g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_XJT) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) #endif #if defined(DSM2) #define IS_MODULE_DSM2(idx) (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_DSM2) @@ -475,11 +475,11 @@ extern void boardInit(); #define IS_MODULE_DSM2(idx) (false) #endif #if defined(TARANIS_INTERNAL_PPM) - #define MAX_INTERNAL_MODULE_CHANNELS() ((g_model.internalModule == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[0].rfProtocol] : maxChannelsModules[g_model.internalModule]) + #define MAX_INTERNAL_MODULE_CHANNELS() ((g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[0].rfProtocol] : maxChannelsModules[g_model.moduleData[INTERNAL_MODULE].type]) #else #define MAX_INTERNAL_MODULE_CHANNELS() (maxChannelsXJT[1+g_model.moduleData[INTERNAL_MODULE].rfProtocol]) #endif - #define MAX_EXTERNAL_MODULE_CHANNELS() ((g_model.externalModule == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[1].rfProtocol] : maxChannelsModules[g_model.externalModule]) + #define MAX_EXTERNAL_MODULE_CHANNELS() ((g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[1].rfProtocol] : maxChannelsModules[g_model.moduleData[EXTERNAL_MODULE].type]) #define MAX_CHANNELS(idx) (idx==INTERNAL_MODULE ? MAX_INTERNAL_MODULE_CHANNELS() : (idx==EXTERNAL_MODULE ? MAX_EXTERNAL_MODULE_CHANNELS() : MAX_TRAINER_CHANNELS())) #elif defined(PCBSKY9X) && !defined(REVA) && !defined(REVX) #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || idx==EXTRA_MODULE || (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_PPM)) diff --git a/radio/src/pulses/pulses_arm.cpp b/radio/src/pulses/pulses_arm.cpp index 526468b83..15e5bd967 100644 --- a/radio/src/pulses/pulses_arm.cpp +++ b/radio/src/pulses/pulses_arm.cpp @@ -54,7 +54,7 @@ void setupPulses(unsigned int port) #if defined(PCBTARANIS) case INTERNAL_MODULE: #if defined(TARANIS_INTERNAL_PPM) - switch (g_model.internalModule) { + switch (g_model.moduleData[INTERNAL_MODULE].type) { case MODULE_TYPE_PPM: required_protocol = PROTO_PPM; break; From 85645001517dd81a166798984f7b64963af7223e Mon Sep 17 00:00:00 2001 From: Cedric Marzer Date: Sun, 31 May 2015 21:49:42 +0200 Subject: [PATCH 12/12] Cosmetic fixes --- radio/src/Makefile | 1 - radio/src/opentx.h | 12 ++++++------ radio/src/pulses/pulses_arm.cpp | 12 ++++++------ 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/radio/src/Makefile b/radio/src/Makefile index 136cc5dc6..189b54174 100644 --- a/radio/src/Makefile +++ b/radio/src/Makefile @@ -340,7 +340,6 @@ TRACE_AUDIO = NO LCD_DUAL_BUFFER = NO # Enable internal module PPM mode for Taranis - # Values = NO, YES TARANIS_INTERNAL_PPM = NO diff --git a/radio/src/opentx.h b/radio/src/opentx.h index a646593e7..f3effd43e 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -463,11 +463,11 @@ extern void boardInit(); #if defined(PCBTARANIS) #if defined(TARANIS_INTERNAL_PPM) - #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==INTERNAL_MODULE && g_model.moduleData[INTERNAL_MODULE].type==MODULE_TYPE_PPM)|| (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_PPM)) - #define IS_MODULE_XJT(idx) (((idx==INTERNAL_MODULE && g_model.moduleData[INTERNAL_MODULE].type==MODULE_TYPE_XJT)|| (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_XJT)) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) + #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==INTERNAL_MODULE && g_model.moduleData[INTERNAL_MODULE].type==MODULE_TYPE_PPM)|| (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_PPM)) + #define IS_MODULE_XJT(idx) (((idx==INTERNAL_MODULE && g_model.moduleData[INTERNAL_MODULE].type==MODULE_TYPE_XJT)|| (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_XJT)) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) #else - #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_PPM)) - #define IS_MODULE_XJT(idx) ((idx==INTERNAL_MODULE || g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_XJT) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) + #define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_PPM)) + #define IS_MODULE_XJT(idx) ((idx==INTERNAL_MODULE || g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_XJT) && (g_model.moduleData[idx].rfProtocol != RF_PROTO_OFF)) #endif #if defined(DSM2) #define IS_MODULE_DSM2(idx) (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_DSM2) @@ -475,9 +475,9 @@ extern void boardInit(); #define IS_MODULE_DSM2(idx) (false) #endif #if defined(TARANIS_INTERNAL_PPM) - #define MAX_INTERNAL_MODULE_CHANNELS() ((g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[0].rfProtocol] : maxChannelsModules[g_model.moduleData[INTERNAL_MODULE].type]) + #define MAX_INTERNAL_MODULE_CHANNELS() ((g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[0].rfProtocol] : maxChannelsModules[g_model.moduleData[INTERNAL_MODULE].type]) #else - #define MAX_INTERNAL_MODULE_CHANNELS() (maxChannelsXJT[1+g_model.moduleData[INTERNAL_MODULE].rfProtocol]) + #define MAX_INTERNAL_MODULE_CHANNELS() (maxChannelsXJT[1+g_model.moduleData[INTERNAL_MODULE].rfProtocol]) #endif #define MAX_EXTERNAL_MODULE_CHANNELS() ((g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[1].rfProtocol] : maxChannelsModules[g_model.moduleData[EXTERNAL_MODULE].type]) #define MAX_CHANNELS(idx) (idx==INTERNAL_MODULE ? MAX_INTERNAL_MODULE_CHANNELS() : (idx==EXTERNAL_MODULE ? MAX_EXTERNAL_MODULE_CHANNELS() : MAX_TRAINER_CHANNELS())) diff --git a/radio/src/pulses/pulses_arm.cpp b/radio/src/pulses/pulses_arm.cpp index 15e5bd967..2cfab5464 100644 --- a/radio/src/pulses/pulses_arm.cpp +++ b/radio/src/pulses/pulses_arm.cpp @@ -53,21 +53,21 @@ void setupPulses(unsigned int port) switch (port) { #if defined(PCBTARANIS) case INTERNAL_MODULE: -#if defined(TARANIS_INTERNAL_PPM) - switch (g_model.moduleData[INTERNAL_MODULE].type) { + #if defined(TARANIS_INTERNAL_PPM) + switch (g_model.moduleData[INTERNAL_MODULE].type) { case MODULE_TYPE_PPM: required_protocol = PROTO_PPM; break; case MODULE_TYPE_XJT: required_protocol = PROTO_PXX; break; - default: + default: required_protocol = PROTO_NONE; break; - } -#else + } + #else required_protocol = g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF ? PROTO_NONE : PROTO_PXX; -#endif + #endif break; #endif