diff --git a/lib/lilka/src/lilka/display.cpp b/lib/lilka/src/lilka/display.cpp index cca79e9..d238d2f 100644 --- a/lib/lilka/src/lilka/display.cpp +++ b/lib/lilka/src/lilka/display.cpp @@ -2,6 +2,7 @@ #include "default_splash.h" #include "spi.h" +#include #include "serial.h" #include "fmath.h" #include "buzzer.h" @@ -37,12 +38,19 @@ Display::Display() : } void Display::begin() { - serial.log("initializing display"); -#ifdef LILKA_BREADBOARD - Arduino_ST7789::begin(40000000); -#else - Arduino_ST7789::begin(80000000); -#endif + // Read display frequency and SPI mode from NVS + Preferences prefs; + prefs.begin(LILKA_SPI_NVS_NAMESPACE, true); + uint32_t displayFrequency = prefs.getUInt(LILKA_SPI_NVS_DISPLAY_FREQUENCY_KEY, LILKA_DISPLAY_FREQUENCY); + uint8_t displayMode = prefs.getUChar(LILKA_SPI_NVS_DISPLAY_MODE_KEY, LILKA_DISPLAY_SPI_MODE); + prefs.end(); + + if (displayMode > SPI_MODE3) displayMode = LILKA_DISPLAY_SPI_MODE; + + serial.log("initializing display at %d Hz, SPI mode %d", displayFrequency, displayMode); + // Arduino_ST7789::begin() forces SPI_MODE3, so call Arduino_TFT::begin() with our own data mode + _override_datamode = displayMode; + Arduino_TFT::begin(displayFrequency); setFont(FONT_10x20); setUTF8Print(true); serial.log("display ok"); diff --git a/lib/lilka/src/lilka/display.h b/lib/lilka/src/lilka/display.h index c54e955..7106b4e 100644 --- a/lib/lilka/src/lilka/display.h +++ b/lib/lilka/src/lilka/display.h @@ -6,6 +6,14 @@ #include #include +#ifdef LILKA_BREADBOARD +# define LILKA_DISPLAY_FREQUENCY 40000000 +#else +# define LILKA_DISPLAY_FREQUENCY 80000000 +#endif +// ST7789 потребує SPI_MODE3 на ESP32 (див. Arduino_ST7789::begin) +#define LILKA_DISPLAY_SPI_MODE SPI_MODE3 + namespace lilka { // Рекомендовані шрифти для використання з дисплеєм. diff --git a/lib/lilka/src/lilka/spi.h b/lib/lilka/src/lilka/spi.h index 3c7d45a..b5a6ac7 100644 --- a/lib/lilka/src/lilka/spi.h +++ b/lib/lilka/src/lilka/spi.h @@ -3,8 +3,10 @@ #include -#define LILKA_SPI_NVS_NAMESPACE "spi" -#define LILKA_SPI_NVS_SD_FREQUENCY_KEY "sdFrequency" +#define LILKA_SPI_NVS_NAMESPACE "spi" +#define LILKA_SPI_NVS_SD_FREQUENCY_KEY "sdFrequency" +#define LILKA_SPI_NVS_DISPLAY_FREQUENCY_KEY "dispFrequency" +#define LILKA_SPI_NVS_DISPLAY_MODE_KEY "dispMode" namespace lilka {