Add functions to get I2C screen frequency and port
This commit is contained in:
+12
-10
@@ -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)
|
#if defined(USE_SH1106) || defined(USE_SH1107) || defined(USE_SH1107_128_64)
|
||||||
dispdev = new SH1106Wire(address.address, -1, -1, geometry,
|
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)
|
#elif defined(USE_ST7789)
|
||||||
#ifdef ESP_PLATFORM
|
#ifdef ESP_PLATFORM
|
||||||
dispdev = new ST7789Spi(&SPI1, ST7789_RESET, ST7789_RS, ST7789_NSS, GEOMETRY_RAWMODE, TFT_WIDTH, TFT_HEIGHT, ST7789_SDA,
|
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);
|
dispdev = new ST7796Spi(&SPI1, ST7796_RESET, ST7796_RS, ST7796_NSS, GEOMETRY_RAWMODE, TFT_WIDTH, TFT_HEIGHT);
|
||||||
#endif
|
#endif
|
||||||
#elif defined(USE_SSD1306)
|
#elif defined(USE_SSD1306)
|
||||||
dispdev =
|
dispdev = new SSD1306Wire(address.address, -1, -1, geometry,
|
||||||
new SSD1306Wire(address.address, -1, -1, geometry,
|
(address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE);
|
||||||
(address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE, SCREEN_I2C_FREQUENCY);
|
isI2cScreen = true;
|
||||||
#if defined(OLED_Y_OFFSET_PAGES)
|
#if defined(OLED_Y_OFFSET_PAGES)
|
||||||
// Panels whose active window does not start at GDDRAM row 0 (e.g. 72x40
|
// 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.
|
// 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);
|
dispdev = new EInkParallelDisplay(EPD_WIDTH, EPD_HEIGHT, EInkParallelDisplay::EPD_ROT_PORTRAIT);
|
||||||
#elif defined(USE_ST7567)
|
#elif defined(USE_ST7567)
|
||||||
dispdev = new ST7567Wire(address.address, -1, -1, geometry,
|
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
|
#elif ARCH_PORTDUINO
|
||||||
if (config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR) {
|
if (config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR) {
|
||||||
if (portduino_config.displayPanel != no_screen) {
|
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);
|
(address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE);
|
||||||
} else {
|
} else {
|
||||||
dispdev = new AutoOLEDWire(address.address, -1, -1, geometry,
|
dispdev = new AutoOLEDWire(address.address, -1, -1, geometry,
|
||||||
(address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE,
|
(address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE);
|
||||||
SCREEN_I2C_FREQUENCY);
|
|
||||||
isAUTOOled = true;
|
isAUTOOled = true;
|
||||||
|
isI2cScreen = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
dispdev =
|
dispdev = new AutoOLEDWire(address.address, -1, -1, geometry,
|
||||||
new AutoOLEDWire(address.address, -1, -1, geometry,
|
(address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE);
|
||||||
(address.port == ScanI2C::I2CPort::WIRE1) ? HW_I2C::I2C_TWO : HW_I2C::I2C_ONE, SCREEN_I2C_FREQUENCY);
|
|
||||||
isAUTOOled = true;
|
isAUTOOled = true;
|
||||||
|
isI2cScreen = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(USE_ST7789)
|
#if defined(USE_ST7789)
|
||||||
|
|||||||
+20
-4
@@ -9,10 +9,6 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#ifndef SCREEN_I2C_FREQUENCY
|
|
||||||
#define SCREEN_I2C_FREQUENCY 700000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define getStringCenteredX(s) ((SCREEN_WIDTH - display->getStringWidth(s)) / 2)
|
#define getStringCenteredX(s) ((SCREEN_WIDTH - display->getStringWidth(s)) / 2)
|
||||||
namespace graphics
|
namespace graphics
|
||||||
{
|
{
|
||||||
@@ -77,6 +73,9 @@ class Screen
|
|||||||
void showOverlayBanner(BannerOverlayOptions) {}
|
void showOverlayBanner(BannerOverlayOptions) {}
|
||||||
void setFrames(FrameFocus focus) {}
|
void setFrames(FrameFocus focus) {}
|
||||||
void endAlert() {}
|
void endAlert() {}
|
||||||
|
bool getIsI2CScreen() { return false; }
|
||||||
|
uint32_t getI2cFrequency() { return 0; }
|
||||||
|
ScanI2C::I2CPort getI2CPort() { return ScanI2C::I2CPort::NO_I2C; }
|
||||||
};
|
};
|
||||||
} // namespace graphics
|
} // namespace graphics
|
||||||
#else
|
#else
|
||||||
@@ -264,6 +263,22 @@ class Screen : public concurrency::OSThread
|
|||||||
Screen &operator=(const Screen &) = delete;
|
Screen &operator=(const Screen &) = delete;
|
||||||
|
|
||||||
ScanI2C::DeviceAddress address_found;
|
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;
|
meshtastic_Config_DisplayConfig_OledType model;
|
||||||
OLEDDISPLAY_GEOMETRY geometry;
|
OLEDDISPLAY_GEOMETRY geometry;
|
||||||
|
|
||||||
@@ -658,6 +673,7 @@ class Screen : public concurrency::OSThread
|
|||||||
int32_t runOnce() final;
|
int32_t runOnce() final;
|
||||||
|
|
||||||
bool isAUTOOled = false;
|
bool isAUTOOled = false;
|
||||||
|
bool isI2cScreen = false;
|
||||||
|
|
||||||
// Screen dimensions (for convenience)
|
// Screen dimensions (for convenience)
|
||||||
// Defined during Screen::setup
|
// Defined during Screen::setup
|
||||||
|
|||||||
Reference in New Issue
Block a user