From 51d67079a9a6b779b6c3da479936b8e3f82278a4 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 7 Feb 2019 18:08:44 +0100 Subject: [PATCH] Fixes for X7 --- radio/src/definitions.h | 2 + radio/src/gui/128x64/model_setup.cpp | 81 +++++++++++++---------- radio/src/gui/480x272/themes/darkblue.cpp | 6 +- radio/src/targets/taranis/CMakeLists.txt | 4 +- radio/src/targets/taranis/board.cpp | 4 +- radio/src/targets/taranis/board.h | 26 ++++++-- 6 files changed, 76 insertions(+), 47 deletions(-) diff --git a/radio/src/definitions.h b/radio/src/definitions.h index e921389f9..8b5f5391e 100644 --- a/radio/src/definitions.h +++ b/radio/src/definitions.h @@ -22,6 +22,8 @@ #define _DEFINITIONS_H_ #include +#include +#include #if !defined(UNUSED) #define UNUSED(x) ((void)(x)) /* to avoid warnings */ diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index 905aad9ff..411d8a4d3 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -77,7 +77,7 @@ enum MenuModelSetupItems { ITEM_MODEL_INTERNAL_MODULE_MODEL_NUM, ITEM_MODEL_INTERNAL_MODULE_FAILSAFE, ITEM_MODEL_INTERNAL_MODULE_RANGE_REG, -#if defined(PCBXLITE) || defined(PCBXLITES) +#if defined(EXTERNAL_ANTENNA) ITEM_MODEL_INTERNAL_MODULE_ANTENNA, #endif ITEM_MODEL_INTERNAL_MODULE_RECEIVER_1_NUMBER, @@ -110,12 +110,12 @@ enum MenuModelSetupItems { #if !defined(PCBXLITE) ITEM_MODEL_EXTERNAL_MODULE_FREQ, #endif + ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE, #if defined(PCBSKY9X) && !defined(REVA) ITEM_MODEL_EXTRA_MODULE_LABEL, ITEM_MODEL_EXTRA_MODULE_CHANNELS, ITEM_MODEL_EXTRA_MODULE_BIND, #endif - ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE, #if defined(PCBX7) ITEM_MODEL_TRAINER_LABEL, ITEM_MODEL_TRAINER_MODE, @@ -124,7 +124,7 @@ enum MenuModelSetupItems { #endif ITEM_MODEL_TRAINER_CHANNELS, ITEM_MODEL_TRAINER_PARAMS, -#elif defined(PCBXLITE) || defined(PCBXLITES) +#elif defined(PCBXLITE) ITEM_MODEL_TRAINER_LABEL, ITEM_MODEL_TRAINER_MODE, ITEM_MODEL_TRAINER_BLUETOOTH, @@ -144,6 +144,8 @@ enum MenuModelSetupItems { #define MODEL_SETUP_RANGE_OFS 4*FW+3 #define MODEL_SETUP_SET_FAILSAFE_OFS 7*FW-2 +#define IF_PXX2(x) (IS_PXX2_ENABLED() ? (uint8_t)(x) : HIDDEN_ROW) + #if defined(PCBTARANIS) #define CURRENT_MODULE_EDITED(k) (k >= ITEM_MODEL_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE) #define CURRENT_RECEIVER_EDITED(k) (k >= ITEM_MODEL_INTERNAL_MODULE_RECEIVER_2_NUMBER ? 1 : 0) @@ -161,30 +163,36 @@ enum MenuModelSetupItems { #else #define SW_WARN_ROWS uint8_t(NAVIGATION_LINE_BY_LINE|(getSwitchWarningsCount()-1)), uint8_t(getSwitchWarningsCount() > 5 ? TITLE_ROW : HIDDEN_ROW) #endif -#if !defined(TARANIS_INTERNAL_PPM) - #define INTERNAL_MODULE_MODE_ROWS 0 // (OFF / RF protocols) -#else + +#if defined(TARANIS_INTERNAL_PPM) #define INTERNAL_MODULE_MODE_ROWS (isModuleXJT(INTERNAL_MODULE) ? (uint8_t)1 : (uint8_t)0) // Module type + RF protocols +#else + #define INTERNAL_MODULE_MODE_ROWS 0 // (OFF / RF protocols) #endif - #define IF_INTERNAL_MODULE_ON(x) (IS_INTERNAL_MODULE_ENABLED()? (uint8_t)(x) : HIDDEN_ROW ) - #define IF_EXTERNAL_MODULE_ON(x) (IS_EXTERNAL_MODULE_ENABLED()? (uint8_t)(x) : HIDDEN_ROW) - #define EXTERNAL_MODULE_BIND_ROWS() ((isModuleXJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) || isModuleSBUS(EXTERNAL_MODULE)) ? (uint8_t)1 : (isModulePPM(EXTERNAL_MODULE) || isModulePXX(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW + +#define IF_INTERNAL_MODULE_ON(x) (IS_INTERNAL_MODULE_ENABLED()? (uint8_t)(x) : HIDDEN_ROW ) +#define IF_EXTERNAL_MODULE_ON(x) (IS_EXTERNAL_MODULE_ENABLED()? (uint8_t)(x) : HIDDEN_ROW) +#define EXTERNAL_MODULE_BIND_ROWS() ((isModuleXJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) || isModuleSBUS(EXTERNAL_MODULE)) ? (uint8_t)1 : (isModulePPM(EXTERNAL_MODULE) || isModulePXX(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW #if defined(PCBSKY9X) && defined(REVX) #define OUTPUT_TYPE_ROWS() (isModulePPM(EXTERNAL_MODULE) ? (uint8_t)0 : HIDDEN_ROW) , #else #define OUTPUT_TYPE_ROWS() #endif - #define PORT_CHANNELS_ROWS(x) (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : 0) + +#define PORT_CHANNELS_ROWS(x) (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : 0) + #if defined(PCBXLITE) #define EXTERNAL_MODULE_MODE_ROWS (isModulePXX(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0 #else #define EXTERNAL_MODULE_MODE_ROWS (isModuleXJT(EXTERNAL_MODULE) || isModuleDSM2(EXTERNAL_MODULE) || isModuleMultimodule(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0 #endif - #define CURSOR_ON_CELL (true) - #define MODEL_SETUP_MAX_LINES (HEADER_LINE+ITEM_MODEL_SETUP_MAX) - #define POT_WARN_ITEMS() ((g_model.potsWarnMode) ? (uint8_t)(NUM_POTS+NUM_SLIDERS) : (uint8_t)0) - #define TIMER_ROWS 2, 0, 0, 0, 0 + +#define CURSOR_ON_CELL (true) +#define MODEL_SETUP_MAX_LINES (HEADER_LINE+ITEM_MODEL_SETUP_MAX) +#define POT_WARN_ITEMS() ((g_model.potsWarnMode) ? (uint8_t)(NUM_POTS+NUM_SLIDERS) : (uint8_t)0) +#define TIMER_ROWS 2, 0, 0, 0, 0 + #if defined(PCBSKY9X) && !defined(REVA) #define EXTRA_MODULE_ROWS LABEL(ExtraModule), 1, 2, #elif defined(PCBXLITE) @@ -194,17 +202,17 @@ enum MenuModelSetupItems { #endif #if defined(PCBX7) -#define ANTENNA_ROW -#if defined(BLUETOOTH) - #define TRAINER_BLUETOOTH_M_ROW ((bluetoothDistantAddr[0] == '\0' || bluetoothState == BLUETOOTH_STATE_CONNECTED) ? (uint8_t)0 : (uint8_t)1) - #define TRAINER_BLUETOOTH_S_ROW (bluetoothDistantAddr[0] == '\0' ? HIDDEN_ROW : LABEL()) - #define TRAINER_BLUETOOTH_ROW (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH ? TRAINER_BLUETOOTH_M_ROW : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? TRAINER_BLUETOOTH_S_ROW : HIDDEN_ROW)), -#else - #define TRAINER_BLUETOOTH_ROW -#endif -#define TRAINER_CHANNELS_ROW (IS_SLAVE_TRAINER() ? (uint8_t)1 : HIDDEN_ROW) -#define TRAINER_PARAMS_ROW (IS_SLAVE_TRAINER() ? (uint8_t)2 : HIDDEN_ROW) -#define TRAINER_ROWS LABEL(Trainer), 0, TRAINER_BLUETOOTH_ROW TRAINER_CHANNELS_ROW, TRAINER_PARAMS_ROW + #define ANTENNA_ROW + #if defined(BLUETOOTH) + #define TRAINER_BLUETOOTH_M_ROW ((bluetoothDistantAddr[0] == '\0' || bluetoothState == BLUETOOTH_STATE_CONNECTED) ? (uint8_t)0 : (uint8_t)1) + #define TRAINER_BLUETOOTH_S_ROW (bluetoothDistantAddr[0] == '\0' ? HIDDEN_ROW : LABEL()) + #define TRAINER_BLUETOOTH_ROW (g_model.trainerData.mode == TRAINER_MODE_MASTER_BLUETOOTH ? TRAINER_BLUETOOTH_M_ROW : (g_model.trainerData.mode == TRAINER_MODE_SLAVE_BLUETOOTH ? TRAINER_BLUETOOTH_S_ROW : HIDDEN_ROW)), + #else + #define TRAINER_BLUETOOTH_ROW + #endif + #define TRAINER_CHANNELS_ROW (IS_SLAVE_TRAINER() ? (uint8_t)1 : HIDDEN_ROW) + #define TRAINER_PARAMS_ROW (IS_SLAVE_TRAINER() ? (uint8_t)2 : HIDDEN_ROW) + #define TRAINER_ROWS LABEL(Trainer), 0, TRAINER_BLUETOOTH_ROW TRAINER_CHANNELS_ROW, TRAINER_PARAMS_ROW #elif defined(PCBXLITES) #define ANTENNA_ROW IF_INTERNAL_MODULE_ON(0), #define TRAINER_BLUETOOTH_ROW @@ -223,7 +231,6 @@ enum MenuModelSetupItems { #define TRAINER_ROWS #endif - void onPXX2BindMenu(const char * result) { reusableBuffer.modelsetup.pxx2_bind_selected_receiver_index = (result - reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_names[0]) / sizeof(reusableBuffer.modelsetup.pxx2_bind_candidate_receivers_names[0]); @@ -260,7 +267,7 @@ void onBindMenu(const char * result) void menuModelSetup(event_t event) { -#if defined(PCBXLITE) || defined(PCBXLITES) +#if defined(EXTERNAL_ANTENNA) // Switch to external antenna confirmation if (warningResult) { warningResult = 0; @@ -284,14 +291,17 @@ void menuModelSetup(event_t event) 0, // Throttle reverse 0, // Throttle trace source 0, // Throttle trim + LABEL(PreflightCheck), 0, // Checklist 0, // Throttle warning SW_WARN_ROWS, // Switch warning POT_WARN_ITEMS(), // Pot warning - NUM_STICKS + NUM_POTS + NUM_SLIDERS + NUM_ROTARY_ENCODERS - 1, // Center beeps + + NUM_STICKS + NUM_POTS + NUM_SLIDERS + NUM_ROTARY_ENCODERS - 1, // Center beeps 0, // Global functions - PXX2_LEN_REGISTRATION_ID - 1, // Registration ID + IF_PXX2(PXX2_LEN_REGISTRATION_ID - 1), // Registration ID + LABEL(InternalModule), INTERNAL_MODULE_MODE_ROWS, IF_INTERNAL_MODULE_ON((uint8_t)0), // Model Number @@ -307,6 +317,7 @@ void menuModelSetup(event_t event) IF_INTERNAL_MODULE_RECEIVER_2_ON((uint8_t)0), // Receiver Telemetry IF_INTERNAL_MODULE_RECEIVER_2_ON((uint8_t)1), // Receiver Bind/Delete IF_INTERNAL_MODULE_ON(INTERNAL_MODULE_ADD_RECEIVER_ROW), + LABEL(ExternalModule), EXTERNAL_MODULE_MODE_ROWS, MULTIMODULE_SUBTYPE_ROWS(EXTERNAL_MODULE) @@ -317,9 +328,10 @@ void menuModelSetup(event_t event) EXTERNAL_MODULE_OPTION_ROW, MULTIMODULE_MODULE_ROWS EXTERNAL_MODULE_POWER_ROW, - EXTRA_MODULE_ROWS - FAILSAFE_ROWS(EXTERNAL_MODULE), - TRAINER_ROWS }); + FAILSAFE_ROWS(EXTERNAL_MODULE), + + TRAINER_ROWS + }); #else MENU_TAB({ HEADER_LINE_COLUMNS 0, TIMER_ROWS, TIMER_ROWS, TIMER_ROWS, 0, 1, 0, 0, 0, 0, 0, LABEL(PreflightCheck), 0, 0, NUM_SWITCHES-1, NUM_STICKS+NUM_POTS+NUM_SLIDERS+NUM_ROTARY_ENCODERS-1, 0, LABEL(ExternalModule), @@ -332,9 +344,10 @@ void menuModelSetup(event_t event) EXTERNAL_MODULE_OPTION_ROW, MULTIMODULE_MODULE_ROWS EXTERNAL_MODULE_POWER_ROW, - EXTRA_MODULE_ROWS FAILSAFE_ROWS(EXTERNAL_MODULE), - TRAINER_ROWS }); + EXTRA_MODULE_ROWS + TRAINER_ROWS + }); #endif MENU_CHECK(menuTabModel, MENU_MODEL_SETUP, HEADER_LINE+MODEL_SETUP_MAX_LINES); diff --git a/radio/src/gui/480x272/themes/darkblue.cpp b/radio/src/gui/480x272/themes/darkblue.cpp index 24cf4616b..9d2e1cbdb 100644 --- a/radio/src/gui/480x272/themes/darkblue.cpp +++ b/radio/src/gui/480x272/themes/darkblue.cpp @@ -136,12 +136,10 @@ class DarkblueTheme: public Theme delete calibHorus; #if defined(PCBX10) - if(STICKS_PWM_ENABLED()) { + if (STICKS_PWM_ENABLED()) calibHorus = BitmapBuffer::load(getThemePath("X10S.bmp")); - } - else { + else calibHorus = BitmapBuffer::load(getThemePath("X10.bmp")); - } #else calibHorus = BitmapBuffer::load(getThemePath("horus.bmp")); #endif diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 5a5f0ca88..66e8e5d6c 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -89,7 +89,7 @@ elseif(PCB STREQUAL XLITE) set(HAPTIC YES) set(LUA_EXPORT lua_export_xlite) set(FLAVOUR xlite) - add_definitions(-DPCBXLITE -DSOFTWARE_VOLUME) + add_definitions(-DPCBXLITE -DSOFTWARE_VOLUME -DEXTERNAL_ANTENNA -DSTICKS_PWM) add_definitions(-DEEPROM_VARIANT=0x2000) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) set(GUI_DIR 128x64) @@ -107,7 +107,7 @@ elseif(PCB STREQUAL XLITES) set(HAPTIC YES) set(LUA_EXPORT lua_export_xlite) set(FLAVOUR xlites) - add_definitions(-DPCBXLITES -DPCBXLITE -DSOFTWARE_VOLUME) + add_definitions(-DPCBXLITES -DPCBXLITE -DSOFTWARE_VOLUME -DEXTERNAL_ANTENNA -DSTICKS_PWM) add_definitions(-DEEPROM_VARIANT=0x1000) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) set(GUI_DIR 128x64) diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index b0982942e..7b029daf8 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -29,6 +29,8 @@ extern "C" { } #endif +HardwareOptions hardwareOptions; + void watchdogInit(unsigned int duration) { IWDG->KR = 0x5555; // Unlock registers @@ -180,7 +182,7 @@ void boardInit() sticksPwmInit(); delay_ms(20); if (pwm_interrupt_count < 32) { - sticks_pwm_disabled = true; + hardwareOptions.sticksPwmDisabled = true; } #endif diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 69dec7440..3063e44d4 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -21,8 +21,7 @@ #ifndef _BOARD_H_ #define _BOARD_H_ -#include "stddef.h" -#include "stdbool.h" +#include "definitions.h" #if defined(__cplusplus) && !defined(SIMU) extern "C" { @@ -446,18 +445,33 @@ enum Analogs { #define NUM_MOUSE_ANALOGS 0 #define NUM_DUMMY_ANAS 0 -#if defined(PCBXLITE) +PACK(typedef struct { +#if defined(STICKS_PWM) + uint8_t sticksPwmDisabled:1; +#endif + uint8_t pxx2Enabled:1; +}) HardwareOptions; + +extern HardwareOptions hardwareOptions; + +#if defined(STICKS_PWM) #define NUM_PWMSTICKS 4 - extern bool sticks_pwm_disabled; - #define STICKS_PWM_ENABLED() (sticks_pwm_disabled == false) + + #define STICKS_PWM_ENABLED() (!hardwareOptions.sticksPwmDisabled) void sticksPwmInit(void); void sticksPwmRead(uint16_t * values); - extern volatile uint32_t pwm_interrupt_count; + extern volatile uint32_t pwm_interrupt_count; // TODO => reusable buffer (boot section) #define NUM_TRIMS_KEYS 4 #else #define NUM_TRIMS_KEYS 8 #endif +#if defined(PCBXLITES) + #define IS_PXX2_ENABLED() (true) +#else + #define IS_PXX2_ENABLED() (hardwareOptions.pxx2Enabled) +#endif + enum CalibratedAnalogs { CALIBRATED_STICK1, CALIBRATED_STICK2,