Add ScopedLock for LVGL.
This commit is contained in:
		
							parent
							
								
									dd5335815c
								
							
						
					
					
						commit
						58a83590ca
					
				@ -32,6 +32,14 @@ static const char *TAG = "lcd-panel";
 | 
			
		||||
#define PIN_SCL                GPIO_NUM_22
 | 
			
		||||
#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 {
 | 
			
		||||
public:
 | 
			
		||||
  Display();
 | 
			
		||||
 | 
			
		||||
@ -7,12 +7,12 @@ void setup()
 | 
			
		||||
{
 | 
			
		||||
  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
 | 
			
		||||
  {
 | 
			
		||||
    // 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 *label = lv_label_create(scr);
 | 
			
		||||
    // Circular scroll
 | 
			
		||||
@ -26,8 +26,6 @@ void setup()
 | 
			
		||||
                     lv_display_get_horizontal_resolution(d.get_display()));
 | 
			
		||||
    lv_obj_align(label, LV_ALIGN_TOP_MID, 0, 0);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  _lock_release(&Display::lvgl_api_lock_);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void loop() { }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user