Add ScopedLock for LVGL.

This commit is contained in:
Shaun Reed 2025-02-14 15:50:35 -05:00
parent dd5335815c
commit 58a83590ca
2 changed files with 12 additions and 6 deletions

View File

@ -32,6 +32,14 @@ static const char *TAG = "lcd-panel";
#define PIN_SCL GPIO_NUM_22 #define PIN_SCL GPIO_NUM_22
#define PIN_RST -1 #define PIN_RST -1
struct ScopedLock {
explicit ScopedLock(_lock_t& lock) : lock_(&lock) { _lock_acquire(lock_); }
~ScopedLock() { _lock_release(lock_); }
private:
_lock_t* lock_;
};
class Display { class Display {
public: public:
Display(); Display();

View File

@ -7,12 +7,12 @@ void setup()
{ {
Display d; Display d;
ESP_LOGI(TAG, "Display LVGL Scroll Text");
// Lock the mutex due to the LVGL APIs are not thread-safe
_lock_acquire(&Display::lvgl_api_lock_);
// UI function // UI function
{ {
// Lock the mutex due to the LVGL APIs are not thread-safe
ScopedLock lock(Display::lvgl_api_lock_);
ESP_LOGI(TAG, "Display LVGL Scroll Text");
lv_obj_t *scr = lv_display_get_screen_active(d.get_display()); lv_obj_t *scr = lv_display_get_screen_active(d.get_display());
lv_obj_t *label = lv_label_create(scr); lv_obj_t *label = lv_label_create(scr);
// Circular scroll // Circular scroll
@ -26,8 +26,6 @@ void setup()
lv_display_get_horizontal_resolution(d.get_display())); lv_display_get_horizontal_resolution(d.get_display()));
lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 0); lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 0);
} }
_lock_release(&Display::lvgl_api_lock_);
} }
void loop() { } void loop() { }