Files
STM32F4-Base/simulator/sim/ui_net_sink_backend_sim.c
T

76 lines
2.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 模块名称: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);
}
}