#低内存 #用户界面 #嵌入式设备 #API 绑定 #内存分配器 #littlevgl #图形界面

无 std lvgl

LVGL 的 Rust 绑定。一个功能强大且易于使用的嵌入式 GUI,具有许多小部件、高级视觉效果(不透明度、抗锯齿、动画)和低内存需求(16K RAM,64K Flash)。

13 个版本

0.6.2 2023年4月2日
0.6.1 2023年4月2日
0.5.2 2021年3月6日
0.4.0 2020年6月19日
0.1.1 2020年4月12日

GUI 中排名 84

每月下载次数 24
2 crates 中使用

MIT 许可证

11MB
217K SLoC

C 214K SLoC // 0.1% comments Rust 2.5K SLoC // 0.1% comments Shell 147 SLoC // 0.3% comments Scons 66 SLoC

LVGL - Rust 中的开源嵌入式 GUI 库

Original LVGL demo image

LVGL 提供了您在嵌入式系统上创建图形用户界面(GUI)所需的一切,包括易于使用的图形元素、美观的视觉效果和低内存占用。

LVGL 默认与 #![no_std] 环境兼容。

Rust 到 WASM 演示 · 官方 LVGL 网站 · C 库存储库 · 官方实时演示


Rust bindings usage demo code.

系统构建依赖项

为了构建 lvgl 项目,您需要安装以下系统依赖项

$ sudo apt install build-essential llvm clang

如果您想构建示例,则需要安装 SDL2。

$ sudo apt install libsdl2-dev

用法

使用以下内容编辑您的 Cargo.toml 文件依赖项

$ cargo add lvgl

构建需要设置以下环境变量

  • DEP_LV_CONFIG_PATH:包含用于配置 LVGL 库的 lv_conf.h 头文件的目录的路径。
  • (可选)LVGL_FONTS_DIR:用于 LVGL 的自定义字体生成的目录。请参阅文档以了解用法。
  • (可选)LVGL_INCLUDE:在构建时使用 drivers 功能时需要包含的 C 头文件,用逗号分隔。默认为 /usr/include,/usr/local/include
  • (可选)LVGL_LINK:在构建时使用 drivers 功能时需要链接的 C 库,用逗号分隔。默认为 SDL2

我们建议将 lv_conf.h 文件放在项目的根目录中。如果是这样,构建项目的命令将是

$ DEP_LV_CONFIG_PATH=`pwd` cargo build

为嵌入式环境构建

我们在构建时使用bindgen生成LittlevGL的绑定。当构建为no_std时,Cargo存在一个问题,因此我们需要使用一种变通方法来构建"lvgl-rs"。Cargo中的主要问题正在通过rust-lang/cargo#7915进行跟踪。

$ DEP_LV_CONFIG_PATH=`pwd` cargo build -Zfeatures=build_dep

在构建裸机目标时,必须同时启用unsafe_no_autoinit特性。在Cargo.toml中查看其文档以了解使用说明。

LVGL全局分配器

提供了一个利用LVGL内存分配器的Rust全局分配器,但默认未启用。可以通过特性lvgl_alloc启用。这将使所有动态内存都由LVGL内部内存管理器分配。

运行演示

针对macOS用户的提示:在运行演示之前,请确保您的机器已安装libsdl。要安装它,请使用HomeBrew。

$ brew install sdl2

此项目包含可以在桌面模拟器中运行的示例。

首先,请确保拉取lvgl-rs子模块。

$ git submodule init
$ git submodule update 

然后运行demo示例。

$ DEP_LV_CONFIG_PATH=`pwd`/examples/include cargo run --example demo --features="alloc"

特性支持

绑定仍在开发中。LVGL有许多功能需要通过lvgl-rs公开。在本节中,您可以检查目前实现了哪些功能。

特性

影响库使用的一般LVGL特性的列表。

  • 显示:我们使用embedded_graphics库将图形绘制到显示,同时使用lv_drivers。您可以使用lvgl-rs与任何embedded_graphics支持的显示以及由lv_drivers支持的显示一起使用。注意:lv_drivers的支持目前是实验性的。
  • 事件:您可以在小部件对象中监听和触发事件。
  • 样式:您可以在任何公开对象中设置样式。我们仍然缺少定义全局基本样式的可能性。
  • 输入设备:可以使用lv_drivers支持的输入设备,并为embedded_graphics指定自定义处理程序。目前,仅支持指针输入设备。注意:lv_drivers的支持目前是实验性的。
  • 字体:如果启用了nightly特性,则LVGL中内置的所有字体都可以在夜间Rust中使用。还可以将自定义字体编码到C文件中(请参阅font模块的文档)。
  • 图像
  • 文件系统
  • 动画
  • 任务

小部件

当前实现的小部件可能缺少一些功能。如果您想要使用的小部件未公开或缺少您想要使用的功能,请发送Pull Request或打开一个问题。

SWUbanner

依赖关系

~0.6–4MB
~68K SLoC