Reclock I2C for sensors is aware of screen I2C frequency (#9898)
* Add define for screen I2C frequency * Add functions to get I2C screen frequency and port * Make reclock function aware of screen-set I2C speeds * Refurbish ReClockI2C API * Make ReClockI2C API class * Use new API in AirQualityTelemetry module * Minor changes on some logs * Update esp8266-oled library * Fix esp8266 library * Minor logging changes * Improve setClock and restoreClock cases * Make getter functions const, fix capitalisaiton of new functions * Minor typo, remove pragma once * Low prio debug fixes * Mark getter functions as const (properly) * Fix LOG based on coderabbit feedback --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
This commit is contained in:
co-authored by
GitHub
Ben Meadors
parent
a5cf82c69e
commit
4673ed22fc
@@ -481,6 +481,7 @@ 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);
|
||||
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,
|
||||
@@ -498,6 +499,7 @@ Screen::Screen(ScanI2C::DeviceAddress address, meshtastic_Config_DisplayConfig_O
|
||||
#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);
|
||||
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.
|
||||
@@ -521,6 +523,7 @@ Screen::Screen(ScanI2C::DeviceAddress address, meshtastic_Config_DisplayConfig_O
|
||||
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;
|
||||
}
|
||||
}
|
||||
#elif USE_TFTDISPLAY
|
||||
@@ -538,10 +541,12 @@ Screen::Screen(ScanI2C::DeviceAddress address, meshtastic_Config_DisplayConfig_O
|
||||
#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);
|
||||
isI2cScreen = true;
|
||||
#else
|
||||
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)
|
||||
|
||||
@@ -73,6 +73,9 @@ class Screen
|
||||
void showOverlayBanner(BannerOverlayOptions) {}
|
||||
void setFrames(FrameFocus focus) {}
|
||||
void endAlert() {}
|
||||
bool getIsI2cScreen() const { return false; }
|
||||
uint32_t getI2cFrequency() const { return 0; }
|
||||
ScanI2C::I2CPort getI2CPort() const { return ScanI2C::I2CPort::NO_I2C; }
|
||||
};
|
||||
} // namespace graphics
|
||||
#else
|
||||
@@ -260,6 +263,22 @@ class Screen : public concurrency::OSThread
|
||||
Screen &operator=(const Screen &) = delete;
|
||||
|
||||
ScanI2C::DeviceAddress address_found;
|
||||
bool getIsI2cScreen() const { return isI2cScreen; }
|
||||
// Return I2C Speed, or 0 if none
|
||||
uint32_t getI2cFrequency() const
|
||||
{
|
||||
if (getIsI2cScreen())
|
||||
return dispdev->getI2cFrequency();
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
ScanI2C::I2CPort getI2CPort() const
|
||||
{
|
||||
if (getIsI2cScreen())
|
||||
return address_found.port;
|
||||
else
|
||||
return ScanI2C::I2CPort::NO_I2C;
|
||||
}
|
||||
meshtastic_Config_DisplayConfig_OledType model;
|
||||
OLEDDISPLAY_GEOMETRY geometry;
|
||||
|
||||
@@ -654,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
|
||||
|
||||
Reference in New Issue
Block a user