/* * 模块名称:UI Display Port (LVGL 离屏显示端口) * 模块功能:提供 LVGL 1bpp 离屏渲染端口与远程 keypad 输入设备 * 适用平台:STM32F407ZGTx * 作者:王建锋 * 创建日期:2026-08-29 * 修改记录: * 2026-08-29 王建锋 创建初始版本 */ #ifndef UI_PORT_H #define UI_PORT_H #include #include #ifdef __cplusplus extern "C" { #endif /* 屏幕尺寸与帧缓冲(160x160 1bpp = 3200 字节) */ #define UI_SCREEN_W 160 #define UI_SCREEN_H 160 #define UI_FB_SIZE ((UI_SCREEN_W * UI_SCREEN_H) / 8) /* 远端按键码(与 DTU-HMI key.h 保持一致) */ #define UI_KEY_UP 0x02 #define UI_KEY_DOWN 0x40 #define UI_KEY_LEFT 0x10 #define UI_KEY_RIGHT 0x08 #define UI_KEY_ENTER 0x20 #define UI_KEY_ESC 0x01 /* * 函数功能:初始化 LVGL 显示端口与按键输入设备 * 入口参数:无 * 返回值:0 - 成功,其他 - 失败(显示或输入设备创建失败) * 限定条件:无 * 函数说明:1. 初始化 LVGL 内核并创建 1bpp 离屏显示设备 * 2. 创建 keypad 输入设备及默认输入组,用于菜单导航 * 3. 需在 lv_tick_inc/lv_timer_handler 被周期调用后方可刷新 */ int ui_port_init(void); /* * 函数功能:获取内存帧缓冲首地址 * 入口参数:无 * 返回值:帧缓冲首地址 uint8_t * 固定长度 UI_FB_SIZE 字节 * 限定条件:ui_port_init() 已成功调用 * 函数说明:1. 帧缓冲由 flush 回调写入最新渲染结果 * 2. 供 RemoDispBus 服务端读取并推送至远端 */ uint8_t *ui_port_get_framebuffer(void); /* * 函数功能:向输入队列喂入一个远端按键值 * 入口参数:key_val - 远端键码 uint8_t UI_KEY_* 取值之一 * 返回值:无 * 限定条件:无 * 函数说明:1. 将远端键码映射为 LVGL 按键后缓存 * 2. 由 keypad 读取回调在下次轮询时上报,驱动菜单导航 */ void ui_port_queue_key(uint8_t key_val); /* * 函数功能:UI 周期步进(更新系统节拍并刷新 LVGL) * 入口参数:tick_ms - 距上次调用的毫秒数 uint32_t 建议 10 * 返回值:无 * 限定条件:ui_port_init() 已成功调用 * 函数说明:1. 调用 lv_tick_inc 推进 LVGL 内部时钟 * 2. 调用 lv_timer_handler 处理重绘,结果经 flush 写入帧缓冲 * 3. 须由任务以固定周期调用,否则界面停止刷新 */ void ui_port_step(uint32_t tick_ms); #ifdef __cplusplus } #endif #endif /* UI_PORT_H */