ui_net_sink 拆分为协议层与平台后端,新增 RemoDispBus 设计文档
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* 模块名称:UI Network Sink Backend (模拟器实现)
|
||||
* 模块功能:RemoDispBus 服务端在 PC 模拟器端的平台相关操作——
|
||||
* 读回 SDL 屏幕转 1bpp(LCDMEM 数据源)与经 LVGL 注入远端按键
|
||||
* 适用平台:Windows / Linux / macOS (SDL2)
|
||||
* 作者:王建锋
|
||||
* 创建日期:2026-09-10
|
||||
* 修改记录:
|
||||
* 2026-09-10 王建锋 创建初始版本(双端共用 ui_net_sink 的平台后端)
|
||||
*/
|
||||
#include "ui_net_sink_backend.h"
|
||||
|
||||
#include "ui_port.h" /* 远端按键码 UI_KEY_* 常量 */
|
||||
#include "sim_port.h" /* sim_port_get_screen_mono */
|
||||
#include "lvgl.h" /* lv_group_send_data / LV_KEY_* */
|
||||
|
||||
/*
|
||||
* 函数功能:将远端按键码映射为 LVGL 按键码
|
||||
* 入口参数:remo_key - 远端按键码(UI_KEY_* 之一)
|
||||
* 返回值:对应 LV_KEY_* 值;无法识别返回 0
|
||||
* 限定条件:无
|
||||
* 函数说明:远端按键码与 LVGL 按键码一一对应
|
||||
*/
|
||||
static uint32_t sim_map_key(uint8_t remo_key)
|
||||
{
|
||||
switch (remo_key) {
|
||||
case UI_KEY_UP: return LV_KEY_UP;
|
||||
case UI_KEY_DOWN: return LV_KEY_DOWN;
|
||||
case UI_KEY_LEFT: return LV_KEY_LEFT;
|
||||
case UI_KEY_RIGHT: return LV_KEY_RIGHT;
|
||||
case UI_KEY_ENTER: return LV_KEY_ENTER;
|
||||
case UI_KEY_ESC: return LV_KEY_ESC;
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:读回 SDL 屏幕实际呈现像素并转为 1bpp 位图(LCDMEM 数据源)
|
||||
* 入口参数:out - 输出缓冲(≥ UI_NET_SINK_MONO_SIZE 字节)
|
||||
* out_size - out 容量(字节)
|
||||
* 返回值:0 - 成功,-1 - 失败
|
||||
* 限定条件:sim_port_init() 已成功;须在 SDL 所属(主循环)线程调用
|
||||
* 函数说明:窗口模式显示缓冲经 I1→ARGB8888 转换,不能直读,
|
||||
* 故读回屏幕像素再按红通道阈值打包 1bpp(布局与 MCU 端一致)
|
||||
*/
|
||||
int ui_net_sink_get_lcdmem(uint8_t *out, uint32_t out_size)
|
||||
{
|
||||
if (out == NULL || out_size < UI_NET_SINK_MONO_SIZE) {
|
||||
return -1;
|
||||
}
|
||||
return sim_port_get_screen_mono(out, out_size);
|
||||
}
|
||||
|
||||
/*
|
||||
* 函数功能:经 LVGL 输入组注入一个远端按键
|
||||
* 入口参数:remo_key - 远端按键码(UI_KEY_* 之一)
|
||||
* 返回值:无
|
||||
* 限定条件:默认输入组已建立
|
||||
* 函数说明:映射为 LV_KEY_* 后经 lv_group_send_data 发向焦点对象
|
||||
*/
|
||||
void ui_net_sink_inject_key(uint8_t remo_key)
|
||||
{
|
||||
lv_group_t *g;
|
||||
uint32_t key;
|
||||
|
||||
key = sim_map_key(remo_key);
|
||||
if (key == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
g = lv_group_get_default();
|
||||
if (g != NULL) {
|
||||
lv_group_send_data(g, key);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user