/**
 * @file display_ssd1306_lvgl.h
 * @brief SSD1306 128x64 OLED + LVGL9 (I2C, 内部 L8 缓冲) , 与 CW2015 共总线
 */

#ifndef DISPLAY_SSD1306_LVGL_H
#define DISPLAY_SSD1306_LVGL_H

#include <stdbool.h>
#include "esp_err.h"

#ifdef __cplusplus
extern "C" {
#endif

	/**
	 * @brief 初始化 OLED + LVGL (须在 cw2015_init 之后调用以复用 I2C；若 CW2015 未挂载则在本函数内自建总线)
	 */
	esp_err_t oled_display_init(void);

	/**
	 * @brief 在屏幕坐标 (x,y) 显示单行文本 (可多次调用；内部复用标签槽位)
	 *
	 * 12×12 字体，行距 13px (12+1)，共 5 行 (y=0/13/26/39/52)。
	 * 建议用 oled_compute_cjk_row_y(row) 计算 y；row 0 为 MAC 行。
	 *
	 * @param x 左上角 x (0~127)
	 * @param y 左上角 y (0~63)
	 * @param text 以 '\\0' 结尾的字符串；NULL 则忽略
	 */
	void oled_text_set_at(int x, int y, const char* text);

	/**
	 * @brief 刷新 MAC / IP 行 (从 esp_read_mac 与 bsp current_ip 读取)
	 */
	void oled_refresh_network_info(void);

	/**
	 * @brief 请求在主显示逻辑中刷新网络信息 (可从 IP 事件等线程安全调用)
	 */
	void oled_request_network_refresh(void);

	int oled_compute_cjk_row_y(int row_idx);
#ifdef __cplusplus
}
#endif

#endif /* DISPLAY_SSD1306_LVGL_H */
