From 30018b2432005fff224c2f775cae0932ce0ca821 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Sat, 19 Mar 2016 00:16:19 +0400 Subject: [PATCH 1/4] Backlight control added back in, driver fix (thanks Adela), OFF level configurable --- radio/src/datastructs.h | 1 + radio/src/gui/horus/menu_general_setup.cpp | 23 +++++++++++----------- radio/src/opentx.cpp | 1 + radio/src/targets/horus/board_horus.h | 7 ++++--- radio/src/targets/horus/lcd_driver.cpp | 23 +++++++++++----------- radio/src/targets/simu/simpgmspace.cpp | 4 ++++ radio/src/translations.cpp | 14 ++++++------- radio/src/translations.h | 2 +- 8 files changed, 41 insertions(+), 34 deletions(-) diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index 831ed2ab8..f135121da 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -911,6 +911,7 @@ PACK(struct TrainerData { uint8_t slidersConfig:2; \ uint32_t switchConfig; \ uint8_t potsConfig; /* two bits per pot */ \ + NOBACKUP(uint8_t blOffBright); \ NOBACKUP(char switchNames[NUM_SWITCHES][LEN_SWITCH_NAME]); \ NOBACKUP(char anaNames[NUM_STICKS+NUM_POTS][LEN_ANA_NAME]); \ NOBACKUP(char currModelFilename[LEN_MODEL_FILENAME+1]); \ diff --git a/radio/src/gui/horus/menu_general_setup.cpp b/radio/src/gui/horus/menu_general_setup.cpp index b13f9b21c..2b9259674 100644 --- a/radio/src/gui/horus/menu_general_setup.cpp +++ b/radio/src/gui/horus/menu_general_setup.cpp @@ -73,11 +73,12 @@ enum menuGeneralSetupItems { ITEM_SETUP_INACTIVITY_ALARM, // ITEM_SETUP_MEMORY_WARNING, ITEM_SETUP_ALARM_WARNING, - // ITEM_SETUP_BACKLIGHT_LABEL, - // ITEM_SETUP_BACKLIGHT_MODE, - // ITEM_SETUP_BACKLIGHT_DELAY, - // ITEM_SETUP_BRIGHTNESS, - // ITEM_SETUP_FLASH_BEEP, + ITEM_SETUP_BACKLIGHT_LABEL, + ITEM_SETUP_BACKLIGHT_MODE, + ITEM_SETUP_BACKLIGHT_DELAY, + ITEM_SETUP_BRIGHTNESS, + ITEM_SETUP_DIM_LEVEL, + ITEM_SETUP_FLASH_BEEP, // CASE_SPLASH_PARAM(ITEM_SETUP_DISABLE_SPLASH) CASE_GPS(ITEM_SETUP_TIMEZONE) CASE_GPS(ITEM_SETUP_GPSFORMAT) @@ -372,7 +373,6 @@ bool menuGeneralSetup(evt_t event) if (attr) g_eeGeneral.inactivityTimer = checkIncDec(event, g_eeGeneral.inactivityTimer, 0, 250, EE_GENERAL); //0..250minutes break; -#if 0 case ITEM_SETUP_BACKLIGHT_LABEL: lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BACKLIGHT_LABEL); break; @@ -394,7 +394,7 @@ bool menuGeneralSetup(evt_t event) break; case ITEM_SETUP_BRIGHTNESS: - lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BRIGHTNESS); + lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BLONBRIGHTNESS); lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, 100-g_eeGeneral.backlightBright, attr|LEFT) ; if (attr) { uint8_t b = 100 - g_eeGeneral.backlightBright; @@ -403,12 +403,11 @@ bool menuGeneralSetup(evt_t event) } break; - case ITEM_SETUP_BACKLIGHT_COLOR: - lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BLCOLOR); - drawSlider(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.backlightColor, 20, attr); - if (attr) g_eeGeneral.backlightColor = checkIncDec(event, g_eeGeneral.backlightColor, 0, 20, EE_GENERAL | NO_INCDEC_MARKS); + case ITEM_SETUP_DIM_LEVEL: + lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BLOFFBRIGHTNESS); + lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.blOffBright, attr|LEFT) ; + if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.blOffBright, 0, 100); break; -#endif #if 0 case ITEM_SETUP_DISABLE_SPLASH: diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index ed38b9e8f..0beaec4dc 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -258,6 +258,7 @@ void generalDefault() #elif defined(PCBHORUS) g_eeGeneral.potsConfig = 0x05; // S1 and S2 = pots with detent g_eeGeneral.slidersConfig = 0x03; // LS and RS = sliders with detent + g_eeGeneral.blOffBright = 20; #elif defined(PCBTARANIS) g_eeGeneral.potsConfig = 0x05; // S1 and S2 = pots with detent g_eeGeneral.slidersConfig = 0x03; // LS and RS = sliders with detent diff --git a/radio/src/targets/horus/board_horus.h b/radio/src/targets/horus/board_horus.h index 949ae32cd..39d32a788 100644 --- a/radio/src/targets/horus/board_horus.h +++ b/radio/src/targets/horus/board_horus.h @@ -272,11 +272,12 @@ void DMACopyAlphaBitmap(uint16_t * dest, uint16_t destw, uint16_t x, uint16_t y, void DMABitmapConvert(uint16_t * dest, const uint8_t * src, uint16_t w, uint16_t h, uint32_t format); void lcdStoreBackupBuffer(void); int lcdRestoreBackupBuffer(void); +void LCD_ControlLight(uint16_t dutyCycle); // Backlight driver -#define setBacklight(xx) -#define backlightEnable() -#define backlightDisable() +#define setBacklight(xx) LCD_ControlLight(xx) +#define backlightEnable() setBacklight(100-g_eeGeneral.backlightBright) +#define backlightDisable() setBacklight(g_eeGeneral.blOffBright) #define isBacklightEnable() true // USB driver diff --git a/radio/src/targets/horus/lcd_driver.cpp b/radio/src/targets/horus/lcd_driver.cpp index e48882b21..73a9c7ad8 100644 --- a/radio/src/targets/horus/lcd_driver.cpp +++ b/radio/src/targets/horus/lcd_driver.cpp @@ -320,32 +320,33 @@ void LCD_LayerInit() void LCD_ControlLight(uint16_t dutyCycle) { + static uint16_t existingDutyCycle; + + if (dutyCycle == existingDutyCycle) { + return; + } + else { + existingDutyCycle = dutyCycle; + } + TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; - uint16_t freq = LCD_BKLIGHT_PWM_FREQ; - - uint32_t temp = 0; - temp = 1000000 / freq - 1; - - TIM_TimeBaseStructure.TIM_Prescaler = SystemCoreClock / 1000000 - 1 ; + TIM_TimeBaseStructure.TIM_Prescaler = SystemCoreClock / 10000 - 1 ;//1KhZ TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; - TIM_TimeBaseStructure.TIM_Period = temp; + TIM_TimeBaseStructure.TIM_Period = 100; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); - unsigned long tempValue; - tempValue = (unsigned long)divRoundClosest((temp+1)*(100-dutyCycle), dutyCycle); - TIM_Cmd(TIM8, DISABLE); /* Channel 1 Configuration in PWM mode */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; - TIM_OCInitStructure.TIM_Pulse = (uint32_t)tempValue; + TIM_OCInitStructure.TIM_Pulse = (100-dutyCycle); TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High; TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index a9c07038f..24e87966e 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -1337,6 +1337,10 @@ uint8_t i2cReadBQ24195(uint8_t) { return 0; } void i2cWriteBQ24195(uint8_t, uint8_t) { } #endif +#if defined(PCBHORUS) +void LCD_ControlLight(uint16_t dutyCycle) { } +#endif + void serialPrintf(const char * format, ...) { } void serialCrlf() { } void serialPutc(char c) { } diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index fd545efd6..f1d29b048 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -248,7 +248,7 @@ const pm_char STR_PERSISTENT[] PROGMEM = TR_PERSISTENT; const pm_char STR_BACKLIGHT_LABEL[] PROGMEM = TR_BACKLIGHT_LABEL; const pm_char STR_BLDELAY[] PROGMEM = TR_BLDELAY; -#if defined(PWM_BACKLIGHT) +#if defined(PWM_BACKLIGHT) || defined(PCBHORUS) const pm_char STR_BLONBRIGHTNESS[] PROGMEM = TR_BLONBRIGHTNESS; const pm_char STR_BLOFFBRIGHTNESS[] PROGMEM = TR_BLOFFBRIGHTNESS; #endif @@ -616,9 +616,9 @@ const pm_char STR_REMOVE_SCREEN[] PROGMEM = TR_REMOVE_SCREEN; const pm_char STR_MODULE[] PROGMEM = TR_MODULE; const pm_char STR_ENABLE_POPUP[] PROGMEM = TR_ENABLE_POPUP; const pm_char STR_DISABLE_POPUP[] PROGMEM = TR_DISABLE_POPUP; -const pm_char STR_POPUP[] PROGMEM = TR_POPUP; -const pm_char STR_MIN[] PROGMEM = TR_MIN; -const pm_char STR_MAX[] PROGMEM = TR_MAX; + const pm_char STR_POPUP[] PROGMEM = TR_POPUP; + const pm_char STR_MIN[] PROGMEM = TR_MIN; + const pm_char STR_MAX[] PROGMEM = TR_MAX; const pm_char STR_CURVE_PRESET[] PROGMEM = TR_CURVE_PRESET; const pm_char STR_PRESET[] PROGMEM = TR_PRESET; const pm_char STR_MIRROR[] PROGMEM = TR_MIRROR; @@ -652,13 +652,13 @@ const pm_char STR_MAX[] PROGMEM = TR_MAX; const pm_char STR_MENU_HELI[] PROGMEM = TR_MENU_HELI; const pm_char STR_MENU_TRIMS[] PROGMEM = TR_MENU_TRIMS; const pm_char STR_MENU_SWITCHES[] PROGMEM = TR_MENU_SWITCHES; -const pm_char STR_MENU_LOGICAL_SWITCHES[] PROGMEM = TR_MENU_LOGICAL_SWITCHES; + const pm_char STR_MENU_LOGICAL_SWITCHES[] PROGMEM = TR_MENU_LOGICAL_SWITCHES; const pm_char STR_MENU_TRAINER[] PROGMEM = TR_MENU_TRAINER; const pm_char STR_MENU_CHANNELS[] PROGMEM = TR_MENU_CHANNELS; const pm_char STR_MENU_GVARS[] PROGMEM = TR_MENU_GVARS; const pm_char STR_MENU_TELEMETRY[] PROGMEM = TR_MENU_TELEMETRY; -const pm_char STR_MENU_OTHER[] PROGMEM = TR_MENU_OTHER; -const pm_char STR_MENU_INVERT[] PROGMEM = TR_MENU_INVERT; + const pm_char STR_MENU_OTHER[] PROGMEM = TR_MENU_OTHER; + const pm_char STR_MENU_INVERT[] PROGMEM = TR_MENU_INVERT; #endif #if MENUS_LOCK == 1 diff --git a/radio/src/translations.h b/radio/src/translations.h index dde661065..4e39a64e4 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -465,7 +465,7 @@ extern const pm_char STR_BEEPCOUNTDOWN[]; extern const pm_char STR_PERSISTENT[]; extern const pm_char STR_BACKLIGHT_LABEL[]; extern const pm_char STR_BLDELAY[]; -#if defined(PWM_BACKLIGHT) +#if defined(PWM_BACKLIGHT) || defined(PCBHORUS) extern const pm_char STR_BLONBRIGHTNESS[]; extern const pm_char STR_BLOFFBRIGHTNESS[]; #endif From 18f56075a5373193f7600c5c27c2e4d6bf53493d Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Thu, 7 Apr 2016 15:28:28 +0400 Subject: [PATCH 2/4] Avoid EEPROM change by recovering some unused bits --- radio/src/datastructs.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/datastructs.h b/radio/src/datastructs.h index f135121da..336a48bd7 100644 --- a/radio/src/datastructs.h +++ b/radio/src/datastructs.h @@ -911,11 +911,11 @@ PACK(struct TrainerData { uint8_t slidersConfig:2; \ uint32_t switchConfig; \ uint8_t potsConfig; /* two bits per pot */ \ - NOBACKUP(uint8_t blOffBright); \ NOBACKUP(char switchNames[NUM_SWITCHES][LEN_SWITCH_NAME]); \ NOBACKUP(char anaNames[NUM_STICKS+NUM_POTS][LEN_ANA_NAME]); \ NOBACKUP(char currModelFilename[LEN_MODEL_FILENAME+1]); \ - NOBACKUP(uint8_t bluetoothEnable); \ + NOBACKUP(uint8_t bluetoothEnable:1); \ + NOBACKUP(uint8_t blOffBright:7); \ NOBACKUP(char bluetoothName[LEN_BLUETOOTH_NAME]); #elif defined(PCBFLAMENCO) #define EXTRA_GENERAL_FIELDS \ From f534702d59e22fa13793d62e0f3e1ba76e006945 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Fri, 8 Apr 2016 09:22:04 +0400 Subject: [PATCH 3/4] Backlight restored in emergency mode, prevent complete turn off to avoid confusion --- radio/src/gui/horus/menu_general_setup.cpp | 4 ++-- radio/src/targets/horus/board_horus.h | 2 +- radio/src/targets/horus/lcd_driver.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/radio/src/gui/horus/menu_general_setup.cpp b/radio/src/gui/horus/menu_general_setup.cpp index 2b9259674..988ff99f9 100644 --- a/radio/src/gui/horus/menu_general_setup.cpp +++ b/radio/src/gui/horus/menu_general_setup.cpp @@ -398,7 +398,7 @@ bool menuGeneralSetup(evt_t event) lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, 100-g_eeGeneral.backlightBright, attr|LEFT) ; if (attr) { uint8_t b = 100 - g_eeGeneral.backlightBright; - CHECK_INCDEC_GENVAR(event, b, 0, 100); + CHECK_INCDEC_GENVAR(event, b, 5, 100); g_eeGeneral.backlightBright = 100 - b; } break; @@ -406,7 +406,7 @@ bool menuGeneralSetup(evt_t event) case ITEM_SETUP_DIM_LEVEL: lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BLOFFBRIGHTNESS); lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.blOffBright, attr|LEFT) ; - if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.blOffBright, 0, 100); + if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.blOffBright, 5, 100); break; #if 0 diff --git a/radio/src/targets/horus/board_horus.h b/radio/src/targets/horus/board_horus.h index 39d32a788..c17a59af1 100644 --- a/radio/src/targets/horus/board_horus.h +++ b/radio/src/targets/horus/board_horus.h @@ -276,7 +276,7 @@ void LCD_ControlLight(uint16_t dutyCycle); // Backlight driver #define setBacklight(xx) LCD_ControlLight(xx) -#define backlightEnable() setBacklight(100-g_eeGeneral.backlightBright) +#define backlightEnable() setBacklight(UNEXPECTED_SHUTDOWN() ? 100 : 100-g_eeGeneral.backlightBright) #define backlightDisable() setBacklight(g_eeGeneral.blOffBright) #define isBacklightEnable() true diff --git a/radio/src/targets/horus/lcd_driver.cpp b/radio/src/targets/horus/lcd_driver.cpp index 73a9c7ad8..c5aa48f42 100644 --- a/radio/src/targets/horus/lcd_driver.cpp +++ b/radio/src/targets/horus/lcd_driver.cpp @@ -322,7 +322,7 @@ void LCD_ControlLight(uint16_t dutyCycle) { static uint16_t existingDutyCycle; - if (dutyCycle == existingDutyCycle) { + if (dutyCycle == existingDutyCycle || dutyCycle < 5) { return; } else { From 8807aa8689b1b89377f7eacddc689541f4c0bd6e Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Fri, 8 Apr 2016 09:54:36 +0400 Subject: [PATCH 4/4] Navigation fixes --- radio/src/gui/horus/menu_general_setup.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/radio/src/gui/horus/menu_general_setup.cpp b/radio/src/gui/horus/menu_general_setup.cpp index 988ff99f9..d28a71a37 100644 --- a/radio/src/gui/horus/menu_general_setup.cpp +++ b/radio/src/gui/horus/menu_general_setup.cpp @@ -80,6 +80,7 @@ enum menuGeneralSetupItems { ITEM_SETUP_DIM_LEVEL, ITEM_SETUP_FLASH_BEEP, // CASE_SPLASH_PARAM(ITEM_SETUP_DISABLE_SPLASH) + CASE_GPS(ITEM_SETUP_LABEL_GPS) CASE_GPS(ITEM_SETUP_TIMEZONE) CASE_GPS(ITEM_SETUP_GPSFORMAT) CASE_PXX(ITEM_SETUP_COUNTRYCODE) @@ -120,7 +121,9 @@ bool menuGeneralSetup(evt_t event) LABEL(SOUND), 0, 0, 0, 0, 0, 0, 0, CASE_VARIO(LABEL(VARIO)) CASE_VARIO(0) CASE_VARIO(0) CASE_VARIO(0) CASE_VARIO(0) CASE_HAPTIC(LABEL(HAPTIC)) CASE_HAPTIC(0) CASE_HAPTIC(0) CASE_HAPTIC(0) - LABEL(ALARMS), 0, 0, 0, CASE_GPS(0) CASE_GPS(0) CASE_PXX(0) 0, 0, 0, 0, 0, 0, 1/*to force edit mode*/ }); + LABEL(ALARMS), 0, 0, 0, + LABEL(BACKLIGHT), 0, 0, 0, 0, 0, + CASE_GPS(LABEL(GPS)) CASE_GPS(0) CASE_GPS(0) CASE_PXX(0) 0, 0, 0, 0, 0, 0, 1/*to force edit mode*/ }); int sub = menuVerticalPosition; @@ -424,6 +427,10 @@ bool menuGeneralSetup(evt_t event) } #endif + case ITEM_SETUP_LABEL_GPS: + lcdDrawText(MENUS_MARGIN_LEFT, y, STR_GPS); + break; + case ITEM_SETUP_TIMEZONE: lcdDrawText(MENUS_MARGIN_LEFT, y, STR_TIMEZONE); lcdDrawNumber(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.timezone, attr|LEFT);