From 596738b9681c6f330dfeb32a8c8178f264051f14 Mon Sep 17 00:00:00 2001 From: 3djc Date: Fri, 16 Oct 2020 16:26:47 +0200 Subject: [PATCH] Improve new backlight (#8018) Backlight function improvement --- radio/src/functions.cpp | 6 ++++++ radio/src/opentx.cpp | 27 +++++++++++++++++---------- radio/src/opentx.h | 1 + radio/src/targets/horus/board.h | 3 ++- radio/src/targets/sky9x/board.h | 1 + radio/src/targets/taranis/board.h | 1 + 6 files changed, 28 insertions(+), 11 deletions(-) diff --git a/radio/src/functions.cpp b/radio/src/functions.cpp index 4806d3584..943ee5bda 100644 --- a/radio/src/functions.cpp +++ b/radio/src/functions.cpp @@ -356,6 +356,12 @@ void evalFunctions(const CustomFunctionData * functions, CustomFunctionsContext case FUNC_BACKLIGHT: { + newActiveFunctions |= (1u << FUNCTION_BACKLIGHT); + if (!CFN_PARAM(cfn)) { // When no source is set, backlight works like original backlight and turn on regardless of backlight settings + requiredBacklightBright = BACKLIGHT_FORCED_ON; + break; + } + getvalue_t raw = getValue(CFN_PARAM(cfn)); #if defined(COLORLCD) if (raw == -1024) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index acccefe41..8ba466614 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -695,20 +695,27 @@ void checkBacklight() } } - bool backlightOn = (g_eeGeneral.backlightMode == e_backlight_mode_on || (g_eeGeneral.backlightMode != e_backlight_mode_off && lightOffCounter)); - - if (flashCounter) { - backlightOn = !backlightOn; - } - - if (backlightOn) { - currentBacklightBright = requiredBacklightBright; + if (requiredBacklightBright == BACKLIGHT_FORCED_ON) { + currentBacklightBright = g_eeGeneral.backlightBright; BACKLIGHT_ENABLE(); } else { - BACKLIGHT_DISABLE(); + bool backlightOn = ((g_eeGeneral.backlightMode == e_backlight_mode_on) || + (g_eeGeneral.backlightMode != e_backlight_mode_off && lightOffCounter) || + (g_eeGeneral.backlightMode == e_backlight_mode_off && isFunctionActive(FUNCTION_BACKLIGHT))); + + if (flashCounter) { + backlightOn = !backlightOn; + } + + if (backlightOn) { + currentBacklightBright = requiredBacklightBright; + BACKLIGHT_ENABLE(); + } + else { + BACKLIGHT_DISABLE(); + } } - } } void resetBacklightTimeout() diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 241b12f0c..8e444409c 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -852,6 +852,7 @@ enum FunctionsActive { #endif FUNCTION_BACKGND_MUSIC, FUNCTION_BACKGND_MUSIC_PAUSE, + FUNCTION_BACKLIGHT, }; #define VARIO_FREQUENCY_ZERO 700/*Hz*/ diff --git a/radio/src/targets/horus/board.h b/radio/src/targets/horus/board.h index 5da953e61..f95bd81b0 100644 --- a/radio/src/targets/horus/board.h +++ b/radio/src/targets/horus/board.h @@ -546,7 +546,8 @@ void backlightInit(); #else void backlightEnable(uint8_t dutyCycle = 0); #endif -#define BACKLIGHT_LEVEL_MAX 100 +#define BACKLIGHT_LEVEL_MAX 100 +#define BACKLIGHT_FORCED_ON BACKLIGHT_LEVEL_MAX + 1 #if defined(PCBX12S) #define BACKLIGHT_LEVEL_MIN 5 #elif defined(RADIO_FAMILY_T16) diff --git a/radio/src/targets/sky9x/board.h b/radio/src/targets/sky9x/board.h index fd737ceb3..2d098a45f 100644 --- a/radio/src/targets/sky9x/board.h +++ b/radio/src/targets/sky9x/board.h @@ -274,6 +274,7 @@ extern "C" { #define isBacklightEnabled() (PWM->PWM_CH_NUM[0].PWM_CDTY != 100) #define BACKLIGHT_ENABLE() backlightEnable() #define BACKLIGHT_DISABLE() backlightDisable() +#define BACKLIGHT_FORCED_ON 101 // ADC driver #define NUM_POTS 3 diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 2b3f9db75..63ff281e4 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -660,6 +660,7 @@ void pwrResetHandler(); void backlightInit(); void backlightDisable(); #define BACKLIGHT_DISABLE() backlightDisable() +#define BACKLIGHT_FORCED_ON 101 uint8_t isBacklightEnabled(); #if !defined(__cplusplus) #define backlightEnable(...)