Simplify LVGL init: move code into Tactility (#208)
The esp_lvgl_port code was duplicated across all boards, so I moved it into the Tactility subproject to simplify the board implementations.
This commit is contained in:
parent
c1f55429b6
commit
8ccba15c25
@ -9,7 +9,6 @@
|
||||
bool twodotfour_lvgl_init();
|
||||
|
||||
const tt::hal::Configuration cyd_2432S024c_config = {
|
||||
.initLvgl = &twodotfour_lvgl_init,
|
||||
.createDisplay = createDisplay,
|
||||
.sdcard = createYellowSdCard(),
|
||||
.power = nullptr,
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
#include "esp_lvgl_port.h"
|
||||
#include <Tactility/Log.h>
|
||||
#include <Tactility/lvgl/LvglSync.h>
|
||||
#include <Tactility/Thread.h>
|
||||
|
||||
#define TAG "twodotfour_lvgl"
|
||||
|
||||
bool twodotfour_lvgl_init() {
|
||||
const lvgl_port_cfg_t lvgl_cfg = {
|
||||
.task_priority = static_cast<UBaseType_t>(tt::THREAD_PRIORITY_RENDER),
|
||||
.task_stack = 8096,
|
||||
.task_affinity = -1, // core pinning
|
||||
.task_max_sleep_ms = 500,
|
||||
.timer_period_ms = 5
|
||||
};
|
||||
|
||||
if (lvgl_port_init(&lvgl_cfg) != ESP_OK) {
|
||||
TT_LOG_E(TAG, "lvgl port init failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Set syncing functions
|
||||
tt::lvgl::syncSet(&lvgl_port_lock, &lvgl_port_unlock);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -10,11 +10,9 @@
|
||||
#define TDECK_SPI_TRANSFER_SIZE_LIMIT (TDECK_LCD_HORIZONTAL_RESOLUTION * TDECK_LCD_SPI_TRANSFER_HEIGHT * (TDECK_LCD_BITS_PER_PIXEL / 8))
|
||||
|
||||
bool tdeck_init_power();
|
||||
bool tdeck_init_lvgl();
|
||||
|
||||
extern const tt::hal::Configuration lilygo_tdeck = {
|
||||
.initBoot = tdeck_init_power,
|
||||
.initLvgl = tdeck_init_lvgl,
|
||||
.createDisplay = createDisplay,
|
||||
.createKeyboard = createKeyboard,
|
||||
.sdcard = createTdeckSdCard(),
|
||||
|
||||
@ -1,31 +0,0 @@
|
||||
#include <Tactility/Log.h>
|
||||
#include <Tactility/Thread.h>
|
||||
#include <Tactility/lvgl/LvglSync.h>
|
||||
#include "esp_lvgl_port.h"
|
||||
|
||||
#define TAG "core2"
|
||||
|
||||
// LVGL
|
||||
// The minimum task stack seems to be about 3500, but that crashes the wifi app in some scenarios
|
||||
// At 4000, it crashes when the fps renderer is available
|
||||
#define CORE2_LVGL_TASK_STACK_DEPTH 9216
|
||||
|
||||
bool initLvgl() {
|
||||
const lvgl_port_cfg_t lvgl_cfg = {
|
||||
.task_priority = static_cast<UBaseType_t>(tt::THREAD_PRIORITY_RENDER),
|
||||
.task_stack = CORE2_LVGL_TASK_STACK_DEPTH,
|
||||
.task_affinity = -1, // core pinning
|
||||
.task_max_sleep_ms = 500,
|
||||
.timer_period_ms = 5
|
||||
};
|
||||
|
||||
TT_LOG_D(TAG, "LVGL port init");
|
||||
if (lvgl_port_init(&lvgl_cfg) != ESP_OK) {
|
||||
TT_LOG_E(TAG, "LVGL port init failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
tt::lvgl::syncSet(&lvgl_port_lock, &lvgl_port_unlock);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
bool initLvgl();
|
||||
@ -1,6 +1,5 @@
|
||||
#include "M5stackCore2.h"
|
||||
#include "InitBoot.h"
|
||||
#include "InitLvgl.h"
|
||||
#include "Tactility/lvgl/LvglSync.h"
|
||||
#include "hal/Core2Display.h"
|
||||
#include "hal/Core2DisplayConstants.h"
|
||||
@ -11,7 +10,6 @@
|
||||
|
||||
extern const tt::hal::Configuration m5stack_core2 = {
|
||||
.initBoot = initBoot,
|
||||
.initLvgl = initLvgl,
|
||||
.createDisplay = createDisplay,
|
||||
.sdcard = createSdCard(),
|
||||
.power = createPower,
|
||||
|
||||
@ -1,31 +0,0 @@
|
||||
#include <Tactility/Log.h>
|
||||
#include <Tactility/Thread.h>
|
||||
#include <Tactility/lvgl/LvglSync.h>
|
||||
#include <esp_lvgl_port.h>
|
||||
|
||||
#define TAG "core2"
|
||||
|
||||
// LVGL
|
||||
// The minimum task stack seems to be about 3500, but that crashes the wifi app in some scenarios
|
||||
// At 4000, it crashes when the fps renderer is available
|
||||
#define CORE2_LVGL_TASK_STACK_DEPTH 9216
|
||||
|
||||
bool initLvgl() {
|
||||
const lvgl_port_cfg_t lvgl_cfg = {
|
||||
.task_priority = static_cast<UBaseType_t>(tt::THREAD_PRIORITY_RENDER),
|
||||
.task_stack = CORE2_LVGL_TASK_STACK_DEPTH,
|
||||
.task_affinity = -1, // core pinning
|
||||
.task_max_sleep_ms = 500,
|
||||
.timer_period_ms = 5
|
||||
};
|
||||
|
||||
TT_LOG_D(TAG, "LVGL port init");
|
||||
if (lvgl_port_init(&lvgl_cfg) != ESP_OK) {
|
||||
TT_LOG_E(TAG, "LVGL port init failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
tt::lvgl::syncSet(&lvgl_port_lock, &lvgl_port_unlock);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
bool initLvgl();
|
||||
@ -1,6 +1,5 @@
|
||||
#include "M5stackCoreS3.h"
|
||||
#include "InitBoot.h"
|
||||
#include "InitLvgl.h"
|
||||
#include "Tactility/lvgl/LvglSync.h"
|
||||
#include "hal/CoreS3Display.h"
|
||||
#include "hal/CoreS3DisplayConstants.h"
|
||||
@ -11,7 +10,6 @@
|
||||
|
||||
const tt::hal::Configuration m5stack_cores3 = {
|
||||
.initBoot = initBoot,
|
||||
.initLvgl = initLvgl,
|
||||
.createDisplay = createDisplay,
|
||||
.sdcard = createSdCard(),
|
||||
.power = createPower,
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
#include <Tactility/hal/Configuration.h>
|
||||
#include "hal/SimulatorPower.h"
|
||||
#include "LvglTask.h"
|
||||
#include "src/lv_init.h"
|
||||
#include "SdlDisplay.h"
|
||||
#include "SdlKeyboard.h"
|
||||
#include "SimulatorSdCard.h"
|
||||
#include "hal/SdlDisplay.h"
|
||||
#include "hal/SdlKeyboard.h"
|
||||
#include "hal/SimulatorPower.h"
|
||||
#include "hal/SimulatorSdCard.h"
|
||||
|
||||
#include <src/lv_init.h> // LVGL
|
||||
#include <Tactility/hal/Configuration.h>
|
||||
|
||||
#define TAG "hardware"
|
||||
|
||||
@ -1,32 +0,0 @@
|
||||
#include <Tactility/Log.h>
|
||||
#include <Tactility/Thread.h>
|
||||
#include <Tactility/lvgl/LvglSync.h>
|
||||
#include <esp_lvgl_port.h>
|
||||
|
||||
#define TAG "unphone_lvgl"
|
||||
|
||||
// LVGL
|
||||
// The minimum task stack seems to be about 3500, but that crashes the wifi app in some scenarios
|
||||
// At 8192, it sometimes crashes when wifi-auto enables and is busy connecting and then you open WifiManage
|
||||
#define UNPHONE_LVGL_TASK_STACK_DEPTH 9216
|
||||
|
||||
bool unPhoneInitLvgl() {
|
||||
static lv_disp_t* display = nullptr;
|
||||
const lvgl_port_cfg_t lvgl_cfg = {
|
||||
.task_priority = static_cast<UBaseType_t>(tt::THREAD_PRIORITY_RENDER),
|
||||
.task_stack = UNPHONE_LVGL_TASK_STACK_DEPTH,
|
||||
.task_affinity = -1, // core pinning
|
||||
.task_max_sleep_ms = 500,
|
||||
.timer_period_ms = 5
|
||||
};
|
||||
|
||||
TT_LOG_D(TAG, "LVGL port init");
|
||||
if (lvgl_port_init(&lvgl_cfg) != ESP_OK) {
|
||||
TT_LOG_E(TAG, "LVGL port init failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
tt::lvgl::syncSet(&lvgl_port_lock, &lvgl_port_unlock);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -9,11 +9,9 @@
|
||||
#define UNPHONE_SPI_TRANSFER_SIZE_LIMIT (UNPHONE_LCD_HORIZONTAL_RESOLUTION * UNPHONE_LCD_SPI_TRANSFER_HEIGHT * LV_COLOR_DEPTH / 8)
|
||||
|
||||
bool unPhoneInitPower();
|
||||
bool unPhoneInitLvgl();
|
||||
|
||||
extern const tt::hal::Configuration unPhone = {
|
||||
.initBoot = unPhoneInitPower,
|
||||
.initLvgl = unPhoneInitLvgl,
|
||||
.createDisplay = createDisplay,
|
||||
.sdcard = createUnPhoneSdCard(),
|
||||
.power = unPhoneGetPower,
|
||||
|
||||
@ -10,7 +10,7 @@ if (DEFINED ENV{ESP_IDF_VERSION})
|
||||
SRCS ${SOURCE_FILES}
|
||||
INCLUDE_DIRS "Include/"
|
||||
PRIV_INCLUDE_DIRS "Private/"
|
||||
REQUIRES TactilityHeadless lvgl driver elf_loader lv_screenshot QRCode
|
||||
REQUIRES TactilityHeadless lvgl driver elf_loader lv_screenshot QRCode esp_lvgl_port
|
||||
)
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
|
||||
11
Tactility/Private/Tactility/lvgl/EspLvglPort.h
Normal file
11
Tactility/Private/Tactility/lvgl/EspLvglPort.h
Normal file
@ -0,0 +1,11 @@
|
||||
#pragma once
|
||||
|
||||
#ifdef ESP_PLATFORM
|
||||
|
||||
namespace tt::lvgl {
|
||||
|
||||
bool initEspLvglPort();
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -5,8 +5,8 @@
|
||||
#include "Tactility/service/loader/Loader.h"
|
||||
|
||||
#include <Tactility/hal/Device.h>
|
||||
#include <Tactility/hal/Power.h>
|
||||
#include <Tactility/Assets.h>
|
||||
#include <Tactility/Tactility.h>
|
||||
#include <Tactility/Timer.h>
|
||||
|
||||
#include <lvgl.h>
|
||||
|
||||
@ -1,19 +1,19 @@
|
||||
#include "hal/TdeckDisplay.h"
|
||||
#ifdef ESP_PLATFORM
|
||||
|
||||
#include <Tactility/Log.h>
|
||||
#include <Tactility/Thread.h>
|
||||
#include <Tactility/lvgl/LvglSync.h>
|
||||
|
||||
#include <esp_lvgl_port.h>
|
||||
|
||||
#define TAG "tdeck_lvgl"
|
||||
#include <Tactility/Mutex.h>
|
||||
|
||||
// LVGL
|
||||
// The minimum task stack seems to be about 3500, but that crashes the wifi app in some scenarios
|
||||
// At 8192, it sometimes crashes when wifi-auto enables and is busy connecting and then you open WifiManage
|
||||
#define TDECK_LVGL_TASK_STACK_DEPTH 9216
|
||||
#define TAG "lvgl"
|
||||
|
||||
bool tdeck_init_lvgl() {
|
||||
namespace tt::lvgl {
|
||||
|
||||
bool initEspLvglPort() {
|
||||
TT_LOG_D(TAG, "Port init");
|
||||
static lv_disp_t* display = nullptr;
|
||||
const lvgl_port_cfg_t lvgl_cfg = {
|
||||
.task_priority = static_cast<UBaseType_t>(tt::THREAD_PRIORITY_RENDER),
|
||||
@ -23,9 +23,8 @@ bool tdeck_init_lvgl() {
|
||||
.timer_period_ms = 5
|
||||
};
|
||||
|
||||
TT_LOG_D(TAG, "LVGL port init");
|
||||
if (lvgl_port_init(&lvgl_cfg) != ESP_OK) {
|
||||
TT_LOG_E(TAG, "LVGL port init failed");
|
||||
TT_LOG_E(TAG, "Port init failed");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -33,3 +32,7 @@ bool tdeck_init_lvgl() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace tt::lvgl
|
||||
|
||||
#endif
|
||||
@ -7,6 +7,10 @@
|
||||
#include <Tactility/hal/Touch.h>
|
||||
#include <Tactility/kernel/SystemEvents.h>
|
||||
|
||||
#ifdef ESP_PLATFORM
|
||||
#include "Tactility/lvgl/EspLvglPort.h"
|
||||
#endif
|
||||
|
||||
#include <lvgl.h>
|
||||
|
||||
namespace tt::lvgl {
|
||||
@ -82,10 +86,11 @@ void init(const hal::Configuration& config) {
|
||||
|
||||
kernel::systemEventPublish(kernel::SystemEvent::BootInitLvglBegin);
|
||||
|
||||
if (config.initLvgl != nullptr && !config.initLvgl()) {
|
||||
TT_LOG_E(TAG, "LVGL init failed");
|
||||
#ifdef ESP_PLATFORM
|
||||
if (config.lvglInit == hal::LvglInit::Default && !initEspLvglPort()) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
auto display = initDisplay(config);
|
||||
if (display == nullptr) {
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include "./Power.h"
|
||||
#include "./SdCard.h"
|
||||
#include "./i2c/I2c.h"
|
||||
#include "Tactility/hal/spi/Spi.h"
|
||||
@ -8,15 +7,19 @@
|
||||
namespace tt::hal {
|
||||
|
||||
typedef bool (*InitBoot)();
|
||||
typedef bool (*InitHardware)();
|
||||
typedef bool (*InitLvgl)();
|
||||
|
||||
class Display;
|
||||
class Keyboard;
|
||||
class Power;
|
||||
typedef std::shared_ptr<Display> (*CreateDisplay)();
|
||||
typedef std::shared_ptr<Keyboard> (*CreateKeyboard)();
|
||||
typedef std::shared_ptr<Power> (*CreatePower)();
|
||||
|
||||
enum class LvglInit {
|
||||
Default,
|
||||
None
|
||||
};
|
||||
|
||||
struct Configuration {
|
||||
/**
|
||||
* Called before I2C/SPI/etc is initialized.
|
||||
@ -24,13 +27,13 @@ struct Configuration {
|
||||
*/
|
||||
const InitBoot _Nullable initBoot = nullptr;
|
||||
|
||||
/** Create and initialize all LVGL devices. (e.g. display, touch, keyboard) */
|
||||
const InitLvgl _Nullable initLvgl = nullptr;
|
||||
/** Init behaviour: default (esp_lvgl_port for ESP32, nothing for PC) or None (nothing on any platform). Only used in Tactility, not in TactilityHeadless. */
|
||||
const LvglInit lvglInit = LvglInit::Default;
|
||||
|
||||
/** Display HAL functionality. */
|
||||
const CreateDisplay _Nullable createDisplay = nullptr;
|
||||
|
||||
/** Display HAL functionality. */
|
||||
/** Keyboard HAL functionality. */
|
||||
const CreateKeyboard _Nullable createKeyboard = nullptr;
|
||||
|
||||
/** An optional SD card interface. */
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
#include "Tactility/hal/Hal_i.h"
|
||||
#include "Tactility/hal/i2c/I2c.h"
|
||||
#include "Tactility/hal/spi/Spi.h"
|
||||
#include "Tactility/hal/Power.h"
|
||||
|
||||
#include <Tactility/kernel/SystemEvents.h>
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user