4个版本

0.1.3 2022年11月5日
0.1.2 2022年10月22日
0.1.1 2022年10月17日
0.1.0 2022年10月7日

#5 in #flipper-zero


3 个crate中使用 (2 直接)

MIT 协议

4KB

Flipper Zero的Rust API

🦀 ❤️‍🔥 🐬

项目结构

此项目由以下crate组成

  • flipper0-sys: CFFI绑定。

  • flipper0: 高级、类似std类型的绑定和包装器。

  • 其他支持crate,请参阅内部文档

    • flipper0-build-cfg: 构建系统的常量和配置
    • flipper0-fam-build: Manifest生成器
    • flipper0-fap-build: 应用程序包构建工具
    • fam: Flipper应用程序包manifest格式
    • flipper0-macro: 用于注册和rustify入口点函数的Proc-macro #[main]
  • 示例


Flipper Zero绑定

Flipper Zero Fw自动生成的绑定(或“externs”),作为上层抽象层的少量手动封装和添加。

请参阅crate描述示例

状态

Maintenance Status

当前项目状态为WiP。 高度混乱的进行中。任何贡献都受欢迎,你知道的。

构建

有三个选项:使用预构建绑定、从现有的flipper-firmware仓库克隆并构建、克隆源代码并构建。

使用预构建绑定

所需

  • Rust工具链(nightly通道)
  • 目标 thumbv7em-none-eabihf
  • libclang for bindgen(因为bindgen作为构建依赖项不能是可选的)

示例

crate清单

[dependencies]
flipper0-sys = "*"

lib.rs

#![crate_type = "staticlib"] #![no_main] #![no_std]

extern crate flipper0_sys;
use flipper0_sys::ffi::*;

#[no_mangle]
pub unsafe extern "C" fn init(_: *mut u8) -> i32 {
	static MESSAGE: &[u8] = b"Hello, World!";
	furi_thread_stdout_write(MESSAGE.as_ptr() as _, MESSAGE.len());
	0
}

使用 cargo +nightly build --target=thumbv7em-none-eabihf 构建。

从源代码构建绑定

所需

  • Rust工具链(nightly通道)
  • 目标 thumbv7em-none-eabihf
  • libclang 用于 bindgen
  • Flipper Zero 固件 的克隆
    • 环境变量 FLIPPER_FW_SRC_PATH 指向 fw 仓库的根目录
  • ARM 工具链,运行 fbt 以轻松获取

crate清单

[dependencies.flipper0-sys]
version = "*"
default-features = false # disable prebuild
features = [
  "allocator-global",
  "oom-global",
  "panic",
  "use-local-sdk" # enable build from source
  # ...
]

示例代码与上面相同。

使用以下命令构建:FLIPPER_FW_SRC_PATH=~/path/to/flipperzero-firmware/ cargo +nightly build --target=thumbv7em-none-eabihf

还可以查看 示例 的说明。

使用自动克隆远程仓库从源代码构建绑定

所需

  • Rust工具链(nightly通道)
  • 目标 thumbv7em-none-eabihf
  • libclang 用于 bindgen
  • 环境变量 FLIPPER_REPO_BRANCH 包含固件仓库分支的名称(可选)
  • 环境变量 FLIPPER_REPO_REV 包含固件仓库的标签/修订版本名称(可选)
  • 环境变量 FLIPPER_REPO_CLONE_PATH 指向克隆应放置的目录(可选)

示例代码与上面相同,但使用 use-remote-sdk 而不是 use-local-sdk

crate清单

[dependencies.flipper0-sys]
version = "*"
default-features = false # disable prebuild
features = [
  # same as above
  "use-remote-sdk" # enable build from source
]

在指定位置构建

FLIPPER_REPO_CLONE_PATH=/abs/path/ \
  cargo +nightly build --target=thumbv7em-none-eabihf

并且/或者指定分支

FLIPPER_REPO_BRANCH=release \
  cargo +nightly build --target=thumbv7em-none-eabihf

并且/或者指定标签或修订版本

FLIPPER_REPO_REV="0.70.1" \
  cargo +nightly build --target=thumbv7em-none-eabihf

注意

  1. FLIPPER_REPO_CLONE_PATH 被用于代替 FLIPPER_FW_SRC_PATH
  2. 默认情况下,FLIPPER_REPO_CLONE_PATH 指向 $OUT_DIR/sdk
  3. 如果没有指定分支或修订版本,将检出默认分支的头部。

构建配置

环境变量

特性 必需 描述 与特性一起使用
FLIPPER_FW_SRC_PATH 必需 在本地工作副本的 固件仓库 中构建源代码时需要,指向仓库的根目录。 use-local-sdk
ARM_TOOLCHAIN 可选 如果省略,构建脚本将在 固件仓库 的工作副本中搜索它。通常应指向 "arm-none-eabi" 目录。 use-local-sdkuse-remote-sdk
FLIPPER_REPO_REV 可选 修订版本或标签。 use-remote-sdk
FLIPPER_REPO_BRANCH 可选 分支名称。 use-remote-sdk
FLIPPER_REPO_CLONE_PATH 可选 路径指向 SDK 仓库将被克隆的目录。默认为 OUT_DIR/flipperzero-firmware use-remote-sdk

特性

  • allocator:包含分配器实现
  • allocator-global:默认,包含 全局分配器 实现
  • oom-global:默认,内存不足处理程序。禁用它以使用您自定义的处理程序或 #![feature(default_alloc_error_handler)]
  • panic:默认,包含全局panic和OoM处理器
  • :包含用于FAP入口点的#[main]宏。

绑定生成定制功能

可用于与use-local-sdkuse-remote-sdk功能一起使用。

  • derive-default
  • derive-eq
  • derive-copy
  • derive-hash
  • derive-ord
  • derive-partialeq
  • derive-partialord
  • derive-debug - 派生Debug,默认在调试配置中启用

所有这些derive-功能都用于bindgen配置。

构建方法功能

特性 默认 描述 使用环境变量
prebuild + 使用预生成的绑定
use-local-sdk + 查看FLIPPER_FW_SRC_PATH,从源代码构建 FLIPPER_FW_SRC_PATH(必需),ARM_TOOLCHAIN(可选)
use-remote-sdk - 克隆远程git仓库,使用fbt进行初始设置,然后从源代码构建。 FLIPPER_REPO_REVFLIPPER_REPO_BRANCHFLIPPER_REPO_CLONE_PATHARM_TOOLCHAIN(所有变量均为可选)

prebuild是默认功能,仅用于构建crate的能力。


其他对开发有用的文档

无运行时依赖