]> git.tnoah.ca Git - lora-radio.git/commitdiff
Implemented backlight control and display blanking for T-Echo
authorMark Qvist <mark@unsigned.io>
Wed, 15 Jan 2025 20:19:58 +0000 (21:19 +0100)
committerMark Qvist <mark@unsigned.io>
Wed, 15 Jan 2025 20:19:58 +0000 (21:19 +0100)
Display.h

index 17d4ac67cace7ab6001a511a7dcc2f0617ed5819..c79e239f955a05b44c2185f2ca7023c277110fa9 100644 (file)
--- a/Display.h
+++ b/Display.h
@@ -75,7 +75,7 @@
   #define SCL_OLED 17
   #define SDA_OLED 18
 #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_H 64
   #define DISP_ADDR -1
@@ -200,7 +200,10 @@ uint8_t display_contrast = 0x00;
 #elif BOARD_MODEL == BOARD_HELTEC_T114
   void set_contrast(ST7789Spi *display, uint8_t value) { }
 #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
   void set_contrast(Adafruit_ST7789 *display, uint8_t value) {
     static uint8_t level = 0;
@@ -267,10 +270,11 @@ bool display_init() {
       digitalWrite(PIN_T114_TFT_EN, LOW);
     #elif BOARD_MODEL == BOARD_TECHO
       display.init(0, true, 10, false, displaySPI, SPISettings(4000000, MSBFIRST, SPI_MODE0));
+      display.setPartialWindow(0, 0, DISP_W, DISP_H);
       display.epd2.setBusyCallback(busyCallback);
       #if HAS_BACKLIGHT
-        pinMode(pin_backlight, INPUT_PULLUP);
-        digitalWrite(pin_backlight, HIGH);
+        pinMode(pin_backlight, OUTPUT);
+        digitalWrite(pin_backlight, LOW);
       #endif
     #elif BOARD_MODEL == BOARD_TBEAM_S_V1
       Wire.begin(SDA_OLED, SCL_OLED);
@@ -285,9 +289,9 @@ bool display_init() {
 
     #if DISP_CUSTOM_ADDR == true
       #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
-      uint8_t display_address = eeprom_read(eeprom_addr(ADDR_CONF_DADR));
+        uint8_t display_address = eeprom_read(eeprom_addr(ADDR_CONF_DADR));
       #endif
       if (display_address == 0xFF) display_address = DISP_ADDR;
     #else
@@ -304,6 +308,16 @@ bool display_init() {
           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
     
     #if BOARD_MODEL == BOARD_TECHO
@@ -324,9 +338,7 @@ bool display_init() {
     #endif
       return false;
     } else {
-      #if BOARD_MODEL != BOARD_TECHO
-        set_contrast(&display, display_contrast);
-      #endif
+      set_contrast(&display, display_contrast);
       if (display_rotation != 0xFF) {
         if (display_rotation == 0 || display_rotation == 2) {
           disp_mode = DISP_MODE_LANDSCAPE;
@@ -381,9 +393,6 @@ bool display_init() {
       }
 
       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; }
 
@@ -397,10 +406,16 @@ bool display_init() {
       #endif
 
       #if HAS_EEPROM
-        #if MCU_VARIANT != MCU_NRF52
-          display_intensity = EEPROM.read(eeprom_addr(ADDR_CONF_DINT));
-        #else
-          display_intensity = eeprom_read(eeprom_addr(ADDR_CONF_DINT));
+        display_intensity = EEPROM.read(eeprom_addr(ADDR_CONF_DINT));
+      #elif MCU_VARIANT == MCU_NRF52
+        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
 
@@ -889,6 +904,7 @@ void display_recondition() {
   #endif
 }
 
+bool epd_blanked = false;
 void update_display(bool blank = false) {
   display_updating = true;
   if (blank == true) {
@@ -914,14 +930,16 @@ void update_display(bool blank = false) {
     if (millis()-last_disp_update >= disp_update_interval) {
       if (display_contrast != display_intensity) {
         display_contrast = display_intensity;
-        #if BOARD_MODEL != BOARD_TECHO
-          set_contrast(&display, display_contrast);
-        #endif
+        set_contrast(&display, display_contrast);
       }
 
       #if BOARD_MODEL == BOARD_TECHO
-        display.setFullWindow();
-        display.fillScreen(SSD1306_WHITE);
+        if (!epd_blanked) {
+          display.setFullWindow();
+          display.fillScreen(SSD1306_WHITE);
+          display.display(true);
+          epd_blanked = true;
+        }
       #endif
 
       #if BOARD_MODEL == BOARD_HELTEC_T114
@@ -942,9 +960,7 @@ void update_display(bool blank = false) {
       uint32_t current = millis();
       if (display_contrast != display_intensity) {
         display_contrast = display_intensity;
-        #if BOARD_MODEL != BOARD_TECHO
-          set_contrast(&display, display_contrast);
-        #endif
+        set_contrast(&display, display_contrast);
       }
 
       #if BOARD_MODEL == BOARD_HELTEC_T114
@@ -959,7 +975,7 @@ void update_display(bool blank = false) {
         display_recondition();
       } else {
         #if BOARD_MODEL == BOARD_TECHO
-          display.setPartialWindow(p_ad_x, p_ad_y, 64, 128);
+          display.setFullWindow();
           display.fillScreen(SSD1306_WHITE);
         #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(); }
           else { display.display(true); }
           last_epd_refresh = millis();
+          epd_blanked = false;
         }
       #elif BOARD_MODEL != BOARD_TDECK
         display.display();