From a35c6dcbe96178e722faee4ec953bb292656e78f Mon Sep 17 00:00:00 2001 From: geeksville Date: Sun, 19 Jan 2020 10:12:48 -0800 Subject: [PATCH] dynamically probe for screen and don't even use it if... waking from deep sleep timer --- main/main.ino | 14 +++++++++----- main/screen.ino | 20 +++++++++++++++++++- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/main/main.ino b/main/main.ino index 150a85f..a927291 100644 --- a/main/main.ino +++ b/main/main.ino @@ -272,7 +272,7 @@ void doDeepSleep() // Perform power on init that we do on each wake from deep sleep void initDeepSleep() { bootCount++; - wakeCause = esp_sleep_get_wakeup_cause(); + wakeCause = esp_sleep_get_wakeup_cause(); /* Not using yet because we are using wake on all buttons being low @@ -293,12 +293,15 @@ void setup() { initDeepSleep(); // delay(1000); FIXME - remove - #ifdef T_BEAM_V10 Wire.begin(I2C_SDA, I2C_SCL); scanI2Cdevice(); + + // FIXME - remove once we know dynamic probing is working + #ifdef T_BEAM_V10 axp192_found = true; - axp192Init(); + ssd1306_found = true; #endif + axp192Init(); // Buttons & LED pinMode(BUTTON_PIN, INPUT_PULLUP); @@ -309,8 +312,9 @@ void setup() { // Hello DEBUG_MSG(APP_NAME " " APP_VERSION "\n"); - // Display - screen_setup(); + // Don't init display if we don't have one or we are waking headless due to a timer event + if(ssd1306_found && wakeCause != ESP_SLEEP_WAKEUP_TIMER) + screen_setup(); // Init GPS gps_setup(); diff --git a/main/screen.ino b/main/screen.ino index d7cf520..dc11833 100644 --- a/main/screen.ino +++ b/main/screen.ino @@ -32,6 +32,8 @@ SSD1306Wire * display; uint8_t _screen_line = SCREEN_HEADER_HEIGHT - 1; void _screen_header() { + if(!display) return; + char buffer[20]; // Message count @@ -51,25 +53,36 @@ void _screen_header() { } void screen_show_logo() { + if(!display) return; + uint8_t x = (display->getWidth() - TTN_IMAGE_WIDTH) / 2; uint8_t y = SCREEN_HEADER_HEIGHT + (display->getHeight() - SCREEN_HEADER_HEIGHT - TTN_IMAGE_HEIGHT) / 2 + 1; display->drawXbm(x, y, TTN_IMAGE_WIDTH, TTN_IMAGE_HEIGHT, TTN_IMAGE); } void screen_off() { + if(!display) return; + display->displayOff(); } void screen_on() { + if(!display) return; + display->displayOn(); } void screen_clear() { + if(!display) return; + display->clear(); } void screen_print(const char * text, uint8_t x, uint8_t y, uint8_t alignment) { DEBUG_MSG(text); + + if(!display) return; + display->setTextAlignment((OLEDDISPLAY_TEXT_ALIGNMENT) alignment); display->drawString(x, y, text); } @@ -79,6 +92,8 @@ void screen_print(const char * text, uint8_t x, uint8_t y) { } void screen_print(const char * text) { + if(!display) return; + display->print(text); if (_screen_line + 8 > display->getHeight()) { // scroll @@ -88,7 +103,8 @@ void screen_print(const char * text) { } void screen_update() { - display->display(); + if(display) + display->display(); } void screen_setup() { @@ -103,6 +119,8 @@ void screen_setup() { } void screen_loop() { + if(!display) return; + #ifdef T_BEAM_V10 if (axp192_found && pmu_irq) { pmu_irq = false;