一个带演示卡带和 PC SDL2 主机的 C 语言帧缓冲引擎框架。
该项目计划未来在 ESP32 硬件上运行。当前的 PC
主机作为原生开发目标,用于在嵌入式集成前测试帧缓冲引擎和
演示卡带。
rosakasa_core 还与
Lys Entertainment System
项目相关联,该项目位于一个独立的代码库中。
结构
include/rosakasa/display/ 公共帧缓冲区/显示 API
demo/ 演示卡带的初始化/更新入口点
demo/src/ 演示卡带的渲染辅助函数及源代码
host/pc/ 将引擎与演示卡带连接起来的 PC 可执行文件
src/engine/ 引擎生命周期、HTTP/WebSocket 包以及 SDL 显示后端
位于 demo/src/ 下的演示卡带源代码会由 CMake 自动识别。
原生 PC
make build
make run
如果本地未安装 SDL2,CMake 会默认通过 FetchContent 下载 SDL2。
引擎配置
rosakasa_engine 通过 RosakasaEngineConfig 管理包配置。
HTTP 和 WebSocket 包虽然存在,但默认处于禁用状态,直到连接上
嵌入式或 PC 后端为止:
RosakasaEngineConfig config = rosakasa_engine_default_config();
config.websocket.enabled = true;
config.websocket.host = "192.168.1.10";
config.websocket.path = "/socket";
config.websocket.port = 80;
config.websocket.use_tls = false;
config.websocket.send = platform_websocket_send;
config.websocket.user_data = platform_websocket;
rosakasa_engine_create_with_config(&config, &engine);
面向引擎的发送 API 与后端无关:
RosakasaWebSocket *websocket = rosakasa_engine_websocket(engine);
rosakasa_websocket_send_text(websocket, "{\"type\":\"ping\"}");
已配置的 send 回调负责实际的平台传输
和 WebSocket 帧写入。在 PC 上,这可以由原生 WebSocket
库提供支持;在 ESP32 上,则可以由 ESP-IDF WebSocket 客户端提供支持。
PC 主机包含一个基本的 ws:// 后端。在运行前,请通过环境
变量启用它:
ROSAKASA_WS_HOST=127.0.0.1 ROSAKASA_WS_PORT=4000 ROSAKASA_WS_PATH=/socket make run
ROSAKASA_WS_TLS=1 专用于 wss://,但 PC 后端目前尚不支持
TLS。
演示绘图
该演示程序拥有一个本地帧缓冲区抽象层:
typedef struct {
uint8_t *pixels;
int width;
int height;
int pitch_bytes;
} Framebuffer;
绘图辅助函数接受 Framebuffer * 参数,因此调用方无需重复指定屏幕尺寸:
draw_line(&demo_framebuffer, (Point){20, 20}, (Point){220, 220}, 220);
draw_square(&demo_framebuffer, center, length, 255);
屏幕坐标以左上角为起点:
(0, 0) x 递增 ->
|
v
y 递增
对于默认的 240x240 帧缓冲区,屏幕中心为:
Point screen_center = {
demo_framebuffer.width / 2,
demo_framebuffer.height / 2,
};
draw_square 将其 Point 参数视为正方形的中心。
