Improve backlight handling on color lcd radios (#998)

* no more backlight off mode for color lcd radios
disable backlight input controls in radio setup screen, when they are not used by the selected backlight mode
force backlight on to be at least the brightness of backlight off

* do not allow to set the display brightness below the configured off brightness, except when display mode is set to ON.

* Revert "do not allow to set the display brightness below the configured off brightness, except when display mode is set to ON."

This reverts commit e153a8dc658d53f5420c912e7543d6d0a9fe6ed9.
This commit is contained in:
Malte Langermann
2021-11-12 12:19:45 +11:00
committed by GitHub
parent c39420bde7
commit 5614646861
4 changed files with 77 additions and 7 deletions
+2 -1
View File
@@ -328,7 +328,8 @@ void GeneralSetupPanel::populateBacklightCB()
QString strings[] = { tr("OFF"), tr("Keys"), tr("Sticks"), tr("Keys + Sticks"), tr("ON"), NULL };
b->clear();
for (int i=0; !strings[i].isNull(); i++) {
int startValue = (firmware->getCapability(LcdDepth)>=8)?1:0;
for (int i=startValue; !strings[i].isNull(); i++) {
b->addItem(strings[i], 0);
if (generalSettings.backlightMode == i) {
b->setCurrentIndex(b->count()-1);
+66 -6
View File
@@ -330,31 +330,59 @@ void RadioSetupPage::build(FormWindow * window)
// Backlight mode
new StaticText(window, grid.getLabelSlot(true), STR_MODE, 0, COLOR_THEME_PRIMARY1);
new Choice(window, grid.getFieldSlot(2,0), STR_VBLMODE, e_backlight_mode_off, e_backlight_mode_on, GET_SET_DEFAULT(g_eeGeneral.backlightMode));
//grid.nextLine();
#if defined COLORLCD
BacklightMode minBacklightMode = e_backlight_mode_keys;
#else
BacklightMode minBacklightMode = e_backlight_mode_off;
#endif
const char* values[e_backlight_mode_on+1] = {};
uint8_t len = STR_VBLMODE[0];
const char * value = &STR_VBLMODE[1];
for (int i = e_backlight_mode_off; i <= e_backlight_mode_on; i++) {
values[i] = value;
value += len;
}
new Choice(window, grid.getFieldSlot(2,0), &values[minBacklightMode], minBacklightMode, e_backlight_mode_on, GET_DEFAULT(g_eeGeneral.backlightMode),
[=](int32_t newValue) {
g_eeGeneral.backlightMode = newValue;
updateBacklightControls();
});
//grid.nextLine();
// Delay
auto edit = new NumberEdit(window, grid.getFieldSlot(2, 1), 0, 600,
auto edit = new NumberEdit(window, grid.getFieldSlot(2, 1), 5, 600,
GET_DEFAULT(g_eeGeneral.lightAutoOff * 5),
SET_VALUE(g_eeGeneral.lightAutoOff, newValue / 5));
edit->setStep(5);
edit->setSuffix("s");
backlightTimeout = edit;
grid.nextLine();
// Backlight ON bright
new StaticText(window, grid.getLabelSlot(true), STR_BLONBRIGHTNESS, 0, COLOR_THEME_PRIMARY1);
new Slider(window, grid.getFieldSlot(), BACKLIGHT_LEVEL_MIN, BACKLIGHT_LEVEL_MAX,
backlightOnBright = new Slider(window, grid.getFieldSlot(), BACKLIGHT_LEVEL_MIN, BACKLIGHT_LEVEL_MAX,
[=]() -> int32_t {
return BACKLIGHT_LEVEL_MAX - g_eeGeneral.backlightBright;
},
[=](int32_t newValue) {
g_eeGeneral.backlightBright = BACKLIGHT_LEVEL_MAX - newValue;
if(newValue >= g_eeGeneral.blOffBright || g_eeGeneral.backlightMode == e_backlight_mode_on)
g_eeGeneral.backlightBright = BACKLIGHT_LEVEL_MAX - newValue;
else
g_eeGeneral.backlightBright = BACKLIGHT_LEVEL_MAX - g_eeGeneral.blOffBright;
});
grid.nextLine();
// Backlight OFF bright
new StaticText(window, grid.getLabelSlot(true), STR_BLOFFBRIGHTNESS, 0, COLOR_THEME_PRIMARY1);
new Slider(window, grid.getFieldSlot(), BACKLIGHT_LEVEL_MIN, BACKLIGHT_LEVEL_MAX, GET_SET_DEFAULT(g_eeGeneral.blOffBright));
backlightOffBright = new Slider(window, grid.getFieldSlot(), BACKLIGHT_LEVEL_MIN, BACKLIGHT_LEVEL_MAX, GET_DEFAULT(g_eeGeneral.blOffBright),
[=](int32_t newValue) {
int32_t onBright = BACKLIGHT_LEVEL_MAX - g_eeGeneral.backlightBright;
if(newValue <= onBright || g_eeGeneral.backlightMode == e_backlight_mode_off)
g_eeGeneral.blOffBright = newValue;
else
g_eeGeneral.blOffBright = onBright;
});
grid.nextLine();
#if defined(KEYS_BACKLIGHT_GPIO)
@@ -368,6 +396,8 @@ void RadioSetupPage::build(FormWindow * window)
new StaticText(window, grid.getLabelSlot(true), STR_ALARM, 0, COLOR_THEME_PRIMARY1);
new CheckBox(window, grid.getFieldSlot(), GET_SET_DEFAULT(g_eeGeneral.alarmsFlash));
grid.nextLine();
updateBacklightControls();
}
#if defined(PWR_BUTTON_PRESS)
@@ -496,3 +526,33 @@ void RadioSetupPage::build(FormWindow * window)
window->setInnerHeight(grid.getWindowHeight());
}
void RadioSetupPage::updateBacklightControls()
{
switch(g_eeGeneral.backlightMode)
{
case e_backlight_mode_off:
backlightTimeout->enable(false);
backlightOnBright->enable(false);
backlightOffBright->enable(true);
break;
case e_backlight_mode_keys:
case e_backlight_mode_sticks:
case e_backlight_mode_all:
default:
{
backlightTimeout->enable(true);
backlightOnBright->enable(true);
backlightOffBright->enable(true);
int32_t onBright = BACKLIGHT_LEVEL_MAX - g_eeGeneral.backlightBright;
if(onBright < g_eeGeneral.blOffBright)
g_eeGeneral.backlightBright = BACKLIGHT_LEVEL_MAX - g_eeGeneral.blOffBright;
break;
}
case e_backlight_mode_on:
backlightTimeout->enable(false);
backlightOnBright->enable(true);
backlightOffBright->enable(false);
break;
}
}
+5
View File
@@ -26,4 +26,9 @@ class RadioSetupPage: public PageTab {
RadioSetupPage();
void build(FormWindow * window) override;
private:
void updateBacklightControls();
FormField* backlightTimeout = nullptr;
FormField* backlightOnBright = nullptr;
FormField* backlightOffBright = nullptr;
};
+4
View File
@@ -1878,6 +1878,10 @@ void opentxInit()
#if defined(COLORLCD)
loadTheme();
if (g_eeGeneral.backlightMode == e_backlight_mode_off) {
// no backlight mode off on color lcd radios
g_eeGeneral.backlightMode = e_backlight_mode_keys;
}
#endif
if (g_eeGeneral.backlightMode != e_backlight_mode_off) {