29 lines
		
	
	
		
			988 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			29 lines
		
	
	
		
			988 B
		
	
	
	
		
			C
		
	
	
	
	
	
/*#############################################################################
 | 
						|
## Author: Shaun Reed                                                        ##
 | 
						|
## Legal: All Content (c) 2025 Shaun Reed, all rights reserved               ##
 | 
						|
##                                                                           ##
 | 
						|
## Contact: shaunrd0@gmail.com  | URL: www.shaunreed.com                     ##
 | 
						|
##############################################################################
 | 
						|
*/
 | 
						|
#ifndef SCOPED_LOCK_H
 | 
						|
#define SCOPED_LOCK_H
 | 
						|
 | 
						|
#include <mutex>
 | 
						|
 | 
						|
/**
 | 
						|
 * Obtains LVGL API mutex lock for the duration of local scope.
 | 
						|
 *
 | 
						|
 * LVGL library is not thread-safe, this lock should be held when making calls
 | 
						|
 * to the LVGL API, and released as soon as possible when finished.
 | 
						|
 */
 | 
						|
struct ScopedLock {
 | 
						|
  explicit ScopedLock() { _lock_acquire(&lv_lock_); }
 | 
						|
 | 
						|
  ~ScopedLock() { _lock_release(&lv_lock_); }
 | 
						|
 | 
						|
  /// Mutex used to protect LVGL API calls.
 | 
						|
  static _lock_t lv_lock_;
 | 
						|
};
 | 
						|
 | 
						|
#endif // SCOPED_LOCK_H
 |