#flipper-zero #api #bindings

nightly sys no-std flipper0-sys

Flipper Zero fw 绑定

14 个版本

0.2.14 2022年11月5日
0.2.13 2022年11月5日
0.2.10 2022年10月22日
0.1.5 2022年10月3日

#9 in #flipper-zero

每月下载量:36
用于 flipper0

MIT 许可证

3.5MB
101K SLoC

Flipper Zero 绑定

Flipper Zero Fw 自动生成的绑定(或“externs”),包含一些手工编写的封装和添加,作为上层抽象层。

可以使用以下方式构建:

  • 不使用 Flipper fw 源代码,使用默认功能 prebuild
  • 使用修改后的 fw,使用功能 use-local-sdk
  • 启用功能 use-remote-sdk 官方 fw 将被下载,然后构建方式与 use-local-sdk 功能相同。

兼容性

最低支持版本

最新支持版本可以通过以 fw 开头的 git 标签 确定。

先决条件

  • Rust 工具链,nightly
  • 目标 thumbv7em-none-eabihf
  • libclang 用于 bindgen
  • Flipper Zero 固件克隆 (可选)
  • ARM 工具链,运行 fbt 可轻松获取 (可选)

使用预生成的绑定(prebuild 功能)构建时,只需要 Rust 工具链,nightly 频道。

使用未经修改的官方 fw 构建时,只需要 Rust 工具链和固件源代码。

对于其他情况,请参阅文档示例

入门指南

只需在 cargo 清单文件中添加依赖

[dependencies]
flipper0-sys = "*"

并按照示例中的说明进行操作。

#![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
}

功能

  • 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 是开启的。它使用预先生成的绑定,因此不需要 fw。

功能 默认 描述 使用的环境变量
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(所有变量可选)

依赖项

~1.5–5.5MB
~98K SLoC