diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index 3564f9d05..d890952d7 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -480,7 +480,8 @@ Screen::Screen(ScanI2C::DeviceAddress address, meshtastic_Config_DisplayConfig_O #if defined(USE_SH1106) || defined(USE_SH1107) || defined(USE_SH1107_128_64) dispdev = new SH1106Wire(address.address, -1, -1, geometry, - (address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE, SCREEN_I2C_FREQUENCY); + (address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE); + isI2cScreen = true; #elif defined(USE_ST7789) #ifdef ESP_PLATFORM dispdev = new ST7789Spi(&SPI1, ST7789_RESET, ST7789_RS, ST7789_NSS, GEOMETRY_RAWMODE, TFT_WIDTH, TFT_HEIGHT, ST7789_SDA, @@ -496,9 +497,9 @@ Screen::Screen(ScanI2C::DeviceAddress address, meshtastic_Config_DisplayConfig_O dispdev = new ST7796Spi(&SPI1, ST7796_RESET, ST7796_RS, ST7796_NSS, GEOMETRY_RAWMODE, TFT_WIDTH, TFT_HEIGHT); #endif #elif defined(USE_SSD1306) - dispdev = - new SSD1306Wire(address.address, -1, -1, geometry, - (address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE, SCREEN_I2C_FREQUENCY); + dispdev = new SSD1306Wire(address.address, -1, -1, geometry, + (address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE); + isI2cScreen = true; #if defined(OLED_Y_OFFSET_PAGES) // Panels whose active window does not start at GDDRAM row 0 (e.g. 72x40 // modules on pages 3..7) need a fixed vertical page shift on every write. @@ -526,7 +527,8 @@ Screen::Screen(ScanI2C::DeviceAddress address, meshtastic_Config_DisplayConfig_O dispdev = new EInkParallelDisplay(EPD_WIDTH, EPD_HEIGHT, EInkParallelDisplay::EPD_ROT_PORTRAIT); #elif defined(USE_ST7567) dispdev = new ST7567Wire(address.address, -1, -1, geometry, - (address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE, SCREEN_I2C_FREQUENCY); + (address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE); + isI2cScreen = true; #elif ARCH_PORTDUINO if (config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR) { if (portduino_config.displayPanel != no_screen) { @@ -535,16 +537,16 @@ Screen::Screen(ScanI2C::DeviceAddress address, meshtastic_Config_DisplayConfig_O (address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE); } else { dispdev = new AutoOLEDWire(address.address, -1, -1, geometry, - (address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE, - SCREEN_I2C_FREQUENCY); + (address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE); isAUTOOled = true; + isI2cScreen = true; } } #else - dispdev = - new AutoOLEDWire(address.address, -1, -1, geometry, - (address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE, SCREEN_I2C_FREQUENCY); + dispdev = new AutoOLEDWire(address.address, -1, -1, geometry, + (address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE); isAUTOOled = true; + isI2cScreen = true; #endif #if defined(USE_ST7789) diff --git a/src/graphics/Screen.h b/src/graphics/Screen.h index d9ed2614d..0804ec97e 100644 --- a/src/graphics/Screen.h +++ b/src/graphics/Screen.h @@ -9,10 +9,6 @@ #include #include -#ifndef SCREEN_I2C_FREQUENCY -#define SCREEN_I2C_FREQUENCY 700000 -#endif - #define getStringCenteredX(s) ((SCREEN_WIDTH - display->getStringWidth(s)) / 2) namespace graphics { @@ -77,6 +73,9 @@ class Screen void showOverlayBanner(BannerOverlayOptions) {} void setFrames(FrameFocus focus) {} void endAlert() {} + bool getIsI2CScreen() { return false; } + uint32_t getI2cFrequency() { return 0; } + ScanI2C::I2CPort getI2CPort() { return ScanI2C::I2CPort::NO_I2C; } }; } // namespace graphics #else @@ -264,6 +263,22 @@ class Screen : public concurrency::OSThread Screen &operator=(const Screen &) = delete; ScanI2C::DeviceAddress address_found; + bool getIsI2CScreen() { return isI2cScreen; } + // Return I2C Speed, or 0 if none + uint32_t getI2cFrequency() + { + if (getIsI2CScreen()) + return dispdev->getI2cFrequency(); + else + return 0; + } + ScanI2C::I2CPort getI2CPort() + { + if (getIsI2CScreen()) + return address_found.port; + else + return ScanI2C::I2CPort::NO_I2C; + } meshtastic_Config_DisplayConfig_OledType model; OLEDDISPLAY_GEOMETRY geometry; @@ -658,6 +673,7 @@ class Screen : public concurrency::OSThread int32_t runOnce() final; bool isAUTOOled = false; + bool isI2cScreen = false; // Screen dimensions (for convenience) // Defined during Screen::setup