From 0472e2ccd371ec33969a4060a5338201f2f1883b Mon Sep 17 00:00:00 2001 From: Yevhen Boichuk Date: Thu, 8 Oct 2026 13:14:17 +0300 Subject: [PATCH] add: add config for lilka display --- src/apps/launcher/launcher.cpp | 80 +++++++++++++++++++++++++++++++ src/apps/launcher/launcher.h | 2 + src/keira/localizations/lang_en.h | 3 ++ src/keira/localizations/lang_uk.h | 3 ++ 4 files changed, 88 insertions(+) diff --git a/src/apps/launcher/launcher.cpp b/src/apps/launcher/launcher.cpp index eadedeb7..02447405 100644 --- a/src/apps/launcher/launcher.cpp +++ b/src/apps/launcher/launcher.cpp @@ -203,6 +203,13 @@ void LauncherApp::run() { ITEM::MENU(K_S_LAUNCHER_SD_SPEED, [this]() { this->setSpiSDSpeed(); }), } ), + ITEM::SUBMENU( + K_S_LAUNCHER_DISPLAY, + { + ITEM::MENU(K_S_LAUNCHER_DISPLAY_SPEED, [this]() { this->setDisplaySpeed(); }), + ITEM::MENU(K_S_LAUNCHER_DISPLAY_SPI_MODE, [this]() { this->setDisplaySpiMode(); }), + } + ), ITEM::MENU(K_S_LAUNCHER_SOUND, [this]() { this->runApp(); }), ITEM::SUBMENU( K_S_LAUNCHER_SERVICES, @@ -804,6 +811,79 @@ void LauncherApp::setSpiSDSpeed() { alert("", K_S_CHANGE_ON_NEXT_BOOT); } +void LauncherApp::setDisplaySpeed() { + uint32_t displayFrequencies[] = { + 10000000, // 10 MHz + 20000000, // 20 MHz + 40000000, // 40 MHz + 80000000 // 80 MHz + }; + + lilka::Menu setDisplaySpeedMenu; + setDisplaySpeedMenu.setTitle(K_S_LAUNCHER_DISPLAY_SPEED); + setDisplaySpeedMenu.addActivationButton(K_BTN_BACK); // Exit + + // Add frequencies to menu + for (auto i = 0; i < sizeof(displayFrequencies) / sizeof(displayFrequencies[0]); i++) + setDisplaySpeedMenu.addItem(StringFormat("%d MHz", displayFrequencies[i] / 1000000)); + + // Perform draw + while (!setDisplaySpeedMenu.isFinished()) { + setDisplaySpeedMenu.update(); + setDisplaySpeedMenu.draw(canvas); + queueDraw(); + } + auto button = setDisplaySpeedMenu.getButton(); + + if (button == K_BTN_BACK) return; + + auto index = setDisplaySpeedMenu.getCursor(); + + // store new frequency to NVS + NVS_LOCK; + Preferences prefs; + prefs.begin(LILKA_SPI_NVS_NAMESPACE, false); + prefs.putUInt(LILKA_SPI_NVS_DISPLAY_FREQUENCY_KEY, displayFrequencies[index]); + prefs.end(); + NVS_UNLOCK; + + alert("", K_S_CHANGE_ON_NEXT_BOOT); +} + +void LauncherApp::setDisplaySpiMode() { + uint8_t spiModes[] = {SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3}; + + lilka::Menu setDisplaySpiModeMenu; + setDisplaySpiModeMenu.setTitle(K_S_LAUNCHER_DISPLAY_SPI_MODE); + setDisplaySpiModeMenu.addActivationButton(K_BTN_BACK); // Exit + + // Add SPI modes to menu + for (auto i = 0; i < sizeof(spiModes) / sizeof(spiModes[0]); i++) + setDisplaySpiModeMenu.addItem(StringFormat("SPI_MODE%d", spiModes[i])); + + // Perform draw + while (!setDisplaySpiModeMenu.isFinished()) { + setDisplaySpiModeMenu.update(); + setDisplaySpiModeMenu.draw(canvas); + queueDraw(); + } + auto button = setDisplaySpiModeMenu.getButton(); + + if (button == K_BTN_BACK) return; + + auto index = setDisplaySpiModeMenu.getCursor(); + + // store new SPI mode to NVS + NVS_LOCK; + Preferences prefs; + prefs.begin(LILKA_SPI_NVS_NAMESPACE, false); + prefs.putUChar(LILKA_SPI_NVS_DISPLAY_MODE_KEY, spiModes[index]); + prefs.end(); + NVS_UNLOCK; + + alert("", K_S_CHANGE_ON_NEXT_BOOT); +} + void LauncherApp::wifiToggle() { NetworkService* networkService = static_cast(ksystem.services["network"]); networkService->setEnabled(!networkService->getEnabled()); diff --git a/src/apps/launcher/launcher.h b/src/apps/launcher/launcher.h index 0bf66651..69ffe731 100644 --- a/src/apps/launcher/launcher.h +++ b/src/apps/launcher/launcher.h @@ -70,6 +70,8 @@ class LauncherApp : public App { void wifiToggle(); void wifiManager(); void setSpiSDSpeed(); + void setDisplaySpeed(); + void setDisplaySpiMode(); void setMDNSHostname(); void about(); void info(); diff --git a/src/keira/localizations/lang_en.h b/src/keira/localizations/lang_en.h index 1112bb22..6331bf07 100644 --- a/src/keira/localizations/lang_en.h +++ b/src/keira/localizations/lang_en.h @@ -95,6 +95,9 @@ #define K_S_LAUNCHER_SD "SD" #define K_S_LAUNCHER_SD_FORMAT "Format SD" #define K_S_LAUNCHER_SD_SPEED "SD card frequency" +#define K_S_LAUNCHER_DISPLAY "Display" +#define K_S_LAUNCHER_DISPLAY_SPEED "Display frequency" +#define K_S_LAUNCHER_DISPLAY_SPI_MODE "Display SPI mode" #define K_S_LAUNCHER_SOUND "Sound" #define K_S_LAUNCHER_SERVICES K_S_SERVICES #define K_S_LAUNCHER_WEB K_S_WEB diff --git a/src/keira/localizations/lang_uk.h b/src/keira/localizations/lang_uk.h index a7f0bfc7..9acee536 100644 --- a/src/keira/localizations/lang_uk.h +++ b/src/keira/localizations/lang_uk.h @@ -94,6 +94,9 @@ #define K_S_LAUNCHER_SD "SD" #define K_S_LAUNCHER_SD_FORMAT "Форматування SD-карти" #define K_S_LAUNCHER_SD_SPEED "Частота SD картки" +#define K_S_LAUNCHER_DISPLAY "Дисплей" +#define K_S_LAUNCHER_DISPLAY_SPEED "Частота дисплея" +#define K_S_LAUNCHER_DISPLAY_SPI_MODE "Режим SPI дисплея" #define K_S_LAUNCHER_SOUND "Звук" #define K_S_LAUNCHER_SERVICES K_S_SERVICES #define K_S_LAUNCHER_WEB K_S_WEB