#api #ffi #bindings #no-std #flipper-zero

nightly sys no-std flipper0-sys

Bindings for Flipper Zero fw

14 releases

0.2.14 Nov 5, 2022
0.2.13 Nov 5, 2022
0.2.10 Oct 22, 2022
0.1.5 Oct 3, 2022

#125 in No standard library

Download history 16/week @ 2022-11-20 8/week @ 2022-11-27 19/week @ 2022-12-04 11/week @ 2022-12-11 9/week @ 2022-12-18 15/week @ 2022-12-25 2/week @ 2023-01-01 13/week @ 2023-01-08 7/week @ 2023-01-15 10/week @ 2023-01-22 40/week @ 2023-01-29 45/week @ 2023-02-05 47/week @ 2023-02-12 37/week @ 2023-02-19 4/week @ 2023-03-05

88 downloads per month
Used in flipper0

MIT license

3.5MB
101K SLoC

Bindings for Flipper Zero

Automatically generated bindings (or "externs") for Flipper Zero Fw with some little hand-crafted wrappers and additions as upper abstraction layer.

This can be built with:

  • without Flipper fw sources using default feature prebuild
  • with modified fw using feature use-local-sdk
  • with enabled feature use-remote-sdk official fw will be downloaded, then build as with use-local-sdk feature.

Compatibility

Minimal supported version:

Latest supported version can be determined by git tags starting with fw-.

Prerequisites

  • Rust toolchain, nightly
  • target thumbv7em-none-eabihf
  • libclang for bindgen
  • clone of Flipper Zero firmware (optional)
  • ARM toolchain, run fbt to easily get it (optional)

For build using pre-generated bindings (prebuild feature) just Rust toolchain is required, nightly channel.

For build using non-modified official fw just Rust toolchain and firmware sources are required.

For other cases see documentation and examples.

Hello-world

Just add dependency to your cargo manifest file:

[dependencies]
flipper0-sys = "*"

And follow instructions for examples.

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

Features:

  • allocator: include allocator implementation
  • allocator-global: default, include global allocator implementation
  • oom-global: default, out-of-mem handler. Disable it to use you custom handler or #![feature(default_alloc_error_handler)].
  • panic: default, include global panic & OoM handler
  • macro: include #[main] macro for FAP entry point.

Bindings gen customization features:

Can be used with use-local-sdk or use-remote-sdk features.

  • derive-default
  • derive-eq
  • derive-copy
  • derive-hash
  • derive-ord
  • derive-partialeq
  • derive-partialord
  • derive-debug - derive Debug, enabled by default for debug profile

All of these derive-features are used for bindgen configuration.

Build methods features:

By default prebuild is turned on. It uses pre-generated bindings, so fw not needed.

Feature Default Description Used ENV vars
prebuild + use pre-generated bindings
use-local-sdk + look at FLIPPER_FW_SRC_PATH, build from source FLIPPER_FW_SRC_PATH (required), ARM_TOOLCHAIN (optional)
use-remote-sdk - clone remote git repo, initial setup with fbt, then build from source. FLIPPER_REPO_REV, FLIPPER_REPO_BRANCH, FLIPPER_REPO_CLONE_PATH, ARM_TOOLCHAIN (all vars optional)

Dependencies

~0–1.8MB
~36K SLoC