Implemented backlight control and display blanking for T-Echo

master
Mark Qvist 1 month ago
parent 113b2f1081
commit 4e627d6e6b
  1. 67
      Display.h

@ -75,7 +75,7 @@
#define SCL_OLED 17 #define SCL_OLED 17
#define SDA_OLED 18 #define SDA_OLED 18
#elif BOARD_MODEL == BOARD_TECHO #elif BOARD_MODEL == BOARD_TECHO
SPIClass displaySPI = SPIClass(NRF_SPIM0, pin_disp_miso, pin_disp_sck, pin_disp_mosi); SPIClass displaySPI = SPIClass(NRF_SPIM3, pin_disp_miso, pin_disp_sck, pin_disp_mosi);
#define DISP_W 128 #define DISP_W 128
#define DISP_H 64 #define DISP_H 64
#define DISP_ADDR -1 #define DISP_ADDR -1
@ -200,7 +200,10 @@ uint8_t display_contrast = 0x00;
#elif BOARD_MODEL == BOARD_HELTEC_T114 #elif BOARD_MODEL == BOARD_HELTEC_T114
void set_contrast(ST7789Spi *display, uint8_t value) { } void set_contrast(ST7789Spi *display, uint8_t value) { }
#elif BOARD_MODEL == BOARD_TECHO #elif BOARD_MODEL == BOARD_TECHO
void set_contrast(uint8_t value) { } void set_contrast(void *display, uint8_t value) {
if (value == 0) { digitalWrite(pin_backlight, LOW); }
else { analogWrite(pin_backlight, value); }
}
#elif BOARD_MODEL == BOARD_TDECK #elif BOARD_MODEL == BOARD_TDECK
void set_contrast(Adafruit_ST7789 *display, uint8_t value) { void set_contrast(Adafruit_ST7789 *display, uint8_t value) {
static uint8_t level = 0; static uint8_t level = 0;
@ -267,10 +270,11 @@ bool display_init() {
digitalWrite(PIN_T114_TFT_EN, LOW); digitalWrite(PIN_T114_TFT_EN, LOW);
#elif BOARD_MODEL == BOARD_TECHO #elif BOARD_MODEL == BOARD_TECHO
display.init(0, true, 10, false, displaySPI, SPISettings(4000000, MSBFIRST, SPI_MODE0)); display.init(0, true, 10, false, displaySPI, SPISettings(4000000, MSBFIRST, SPI_MODE0));
display.setPartialWindow(0, 0, DISP_W, DISP_H);
display.epd2.setBusyCallback(busyCallback); display.epd2.setBusyCallback(busyCallback);
#if HAS_BACKLIGHT #if HAS_BACKLIGHT
pinMode(pin_backlight, INPUT_PULLUP); pinMode(pin_backlight, OUTPUT);
digitalWrite(pin_backlight, HIGH); digitalWrite(pin_backlight, LOW);
#endif #endif
#elif BOARD_MODEL == BOARD_TBEAM_S_V1 #elif BOARD_MODEL == BOARD_TBEAM_S_V1
Wire.begin(SDA_OLED, SCL_OLED); Wire.begin(SDA_OLED, SCL_OLED);
@ -285,9 +289,9 @@ bool display_init() {
#if DISP_CUSTOM_ADDR == true #if DISP_CUSTOM_ADDR == true
#if HAS_EEPROM #if HAS_EEPROM
uint8_t display_address = EEPROM.read(eeprom_addr(ADDR_CONF_DADR)); uint8_t display_address = EEPROM.read(eeprom_addr(ADDR_CONF_DADR));
#elif MCU_VARIANT == MCU_NRF52 #elif MCU_VARIANT == MCU_NRF52
uint8_t display_address = eeprom_read(eeprom_addr(ADDR_CONF_DADR)); uint8_t display_address = eeprom_read(eeprom_addr(ADDR_CONF_DADR));
#endif #endif
if (display_address == 0xFF) display_address = DISP_ADDR; if (display_address == 0xFF) display_address = DISP_ADDR;
#else #else
@ -304,6 +308,16 @@ bool display_init() {
display_blanking_timeout = db_timeout*1000; display_blanking_timeout = db_timeout*1000;
} }
} }
#elif MCU_VARIANT == MCU_NRF52
if (eeprom_read(eeprom_addr(ADDR_CONF_BSET)) == CONF_OK_BYTE) {
uint8_t db_timeout = eeprom_read(eeprom_addr(ADDR_CONF_DBLK));
if (db_timeout == 0x00) {
display_blanking_enabled = false;
} else {
display_blanking_enabled = true;
display_blanking_timeout = db_timeout*1000;
}
}
#endif #endif
#if BOARD_MODEL == BOARD_TECHO #if BOARD_MODEL == BOARD_TECHO
@ -324,9 +338,7 @@ bool display_init() {
#endif #endif
return false; return false;
} else { } else {
#if BOARD_MODEL != BOARD_TECHO set_contrast(&display, display_contrast);
set_contrast(&display, display_contrast);
#endif
if (display_rotation != 0xFF) { if (display_rotation != 0xFF) {
if (display_rotation == 0 || display_rotation == 2) { if (display_rotation == 0 || display_rotation == 2) {
disp_mode = DISP_MODE_LANDSCAPE; disp_mode = DISP_MODE_LANDSCAPE;
@ -381,9 +393,6 @@ bool display_init() {
} }
update_area_positions(); update_area_positions();
#if BOARD_MODEL == BOARD_TECHO
display.setPartialWindow(p_ad_x, p_ad_y, 64, 128);
#endif
for (int i = 0; i < WATERFALL_SIZE; i++) { waterfall[i] = 0; } for (int i = 0; i < WATERFALL_SIZE; i++) { waterfall[i] = 0; }
@ -397,10 +406,16 @@ bool display_init() {
#endif #endif
#if HAS_EEPROM #if HAS_EEPROM
#if MCU_VARIANT != MCU_NRF52 display_intensity = EEPROM.read(eeprom_addr(ADDR_CONF_DINT));
display_intensity = EEPROM.read(eeprom_addr(ADDR_CONF_DINT)); #elif MCU_VARIANT == MCU_NRF52
#else display_intensity = eeprom_read(eeprom_addr(ADDR_CONF_DINT));
display_intensity = eeprom_read(eeprom_addr(ADDR_CONF_DINT)); #endif
display_unblank_intensity = display_intensity;
#if BOARD_MODEL == BOARD_TECHO
#if HAS_BACKLIGHT
if (display_intensity == 0) { digitalWrite(pin_backlight, LOW); }
else { analogWrite(pin_backlight, display_intensity); }
#endif #endif
#endif #endif
@ -889,6 +904,7 @@ void display_recondition() {
#endif #endif
} }
bool epd_blanked = false;
void update_display(bool blank = false) { void update_display(bool blank = false) {
display_updating = true; display_updating = true;
if (blank == true) { if (blank == true) {
@ -914,14 +930,16 @@ void update_display(bool blank = false) {
if (millis()-last_disp_update >= disp_update_interval) { if (millis()-last_disp_update >= disp_update_interval) {
if (display_contrast != display_intensity) { if (display_contrast != display_intensity) {
display_contrast = display_intensity; display_contrast = display_intensity;
#if BOARD_MODEL != BOARD_TECHO set_contrast(&display, display_contrast);
set_contrast(&display, display_contrast);
#endif
} }
#if BOARD_MODEL == BOARD_TECHO #if BOARD_MODEL == BOARD_TECHO
display.setFullWindow(); if (!epd_blanked) {
display.fillScreen(SSD1306_WHITE); display.setFullWindow();
display.fillScreen(SSD1306_WHITE);
display.display(true);
epd_blanked = true;
}
#endif #endif
#if BOARD_MODEL == BOARD_HELTEC_T114 #if BOARD_MODEL == BOARD_HELTEC_T114
@ -942,9 +960,7 @@ void update_display(bool blank = false) {
uint32_t current = millis(); uint32_t current = millis();
if (display_contrast != display_intensity) { if (display_contrast != display_intensity) {
display_contrast = display_intensity; display_contrast = display_intensity;
#if BOARD_MODEL != BOARD_TECHO set_contrast(&display, display_contrast);
set_contrast(&display, display_contrast);
#endif
} }
#if BOARD_MODEL == BOARD_HELTEC_T114 #if BOARD_MODEL == BOARD_HELTEC_T114
@ -959,7 +975,7 @@ void update_display(bool blank = false) {
display_recondition(); display_recondition();
} else { } else {
#if BOARD_MODEL == BOARD_TECHO #if BOARD_MODEL == BOARD_TECHO
display.setPartialWindow(p_ad_x, p_ad_y, 64, 128); display.setFullWindow();
display.fillScreen(SSD1306_WHITE); display.fillScreen(SSD1306_WHITE);
#endif #endif
@ -972,6 +988,7 @@ void update_display(bool blank = false) {
if (current-last_epd_full_refresh >= REFRESH_PERIOD) { display.display(false); last_epd_full_refresh = millis(); } if (current-last_epd_full_refresh >= REFRESH_PERIOD) { display.display(false); last_epd_full_refresh = millis(); }
else { display.display(true); } else { display.display(true); }
last_epd_refresh = millis(); last_epd_refresh = millis();
epd_blanked = false;
} }
#elif BOARD_MODEL != BOARD_TDECK #elif BOARD_MODEL != BOARD_TDECK
display.display(); display.display();

Loading…
Cancel
Save