Re implement display
This commit is contained in:
66
main/display/eink_display_handler.h.old
Normal file
66
main/display/eink_display_handler.h.old
Normal file
@@ -0,0 +1,66 @@
|
||||
#pragma once
|
||||
#include "display/display.h"
|
||||
#include "lvgl.h"
|
||||
#include "esp_lvgl_port.h"
|
||||
#include "freertos/semphr.h"
|
||||
|
||||
// Refresh mode configuration
|
||||
#define PARTIAL_REFRESH_THRESHOLD 10 // Full refresh every N partial refreshes
|
||||
#define DISPLAY_WIDTH 800
|
||||
#define DISPLAY_HEIGHT 480
|
||||
#define DISPLAY_BUFFER_SIZE (((DISPLAY_WIDTH * DISPLAY_HEIGHT) / 8) + 8) // 1-bit per pixel + 8-byte palette
|
||||
|
||||
class EInkDisplayHandler : public DisplayHandler {
|
||||
public:
|
||||
EInkDisplayHandler(EventGroupHandle_t system_event_group);
|
||||
virtual ~EInkDisplayHandler();
|
||||
|
||||
void init();
|
||||
void start_touch_task();
|
||||
|
||||
// Request a full refresh on next flush
|
||||
void request_full_refresh();
|
||||
|
||||
// Check if display is busy (refreshing)
|
||||
bool is_busy() const;
|
||||
|
||||
private:
|
||||
// LVGL display and input device handles
|
||||
lv_display_t* _lvgl_display = nullptr;
|
||||
lv_indev_t* _lvgl_touch_indev = nullptr;
|
||||
lv_draw_buf_t* _lvgl_draw_buf = nullptr;
|
||||
|
||||
// Framebuffer
|
||||
uint8_t* _framebuffer = nullptr;
|
||||
bool _framebuffer_in_psram = false;
|
||||
|
||||
// Refresh tracking
|
||||
uint32_t _partial_refresh_count = 0;
|
||||
bool _force_full_refresh = false;
|
||||
SemaphoreHandle_t _refresh_mutex = nullptr;
|
||||
|
||||
// Touch task
|
||||
TaskHandle_t _touch_task_handle = nullptr;
|
||||
|
||||
// Refresh task and queue
|
||||
TaskHandle_t _refresh_task_handle = nullptr;
|
||||
QueueHandle_t _refresh_queue = nullptr;
|
||||
|
||||
// LVGL callbacks
|
||||
static void _lvgl_flush_cb(lv_display_t* disp, const lv_area_t* area, uint8_t* px_map);
|
||||
static void _lvgl_touch_read_cb(lv_indev_t* indev, lv_indev_data_t* data);
|
||||
|
||||
// Display operations
|
||||
void _perform_full_refresh(const uint8_t* framebuffer);
|
||||
void _perform_partial_refresh(const uint8_t* framebuffer);
|
||||
void _wait_for_busy();
|
||||
|
||||
// Touch task
|
||||
static void _touch_task(void* param);
|
||||
|
||||
// Refresh task
|
||||
static void _refresh_task(void* param);
|
||||
|
||||
// Helper to convert LVGL 1-bit buffer to e-paper format
|
||||
void _convert_buffer_to_epaper(const uint8_t* lvgl_buf, uint8_t* epd_buf, size_t size);
|
||||
};
|
||||
Reference in New Issue
Block a user