#框架 #低延迟 #应用程序 #纸张 #平板 #电子墨水 #刷新

libremarkable

仅公开的用于开发具有低延迟部分刷新支持的Remarkable Paper Tablet应用程序的框架

43 个版本

0.6.2 2022年12月12日
0.6.1 2022年9月1日
0.6.0 2022年2月5日
0.5.0 2021年10月21日
0.1.12 2018年3月31日

#53 in FFI

Download history 10/week @ 2024-03-11 40/week @ 2024-03-18 57/week @ 2024-04-01 1/week @ 2024-04-08 4/week @ 2024-04-15 7/week @ 2024-04-22 1/week @ 2024-04-29 28/week @ 2024-05-20 19/week @ 2024-05-27 42/week @ 2024-06-03 7/week @ 2024-06-10 8/week @ 2024-06-17 9/week @ 2024-06-24

每月 70 次下载

MIT 许可证

1MB
4K SLoC

https://crates.io/crates/libremarkable libremarkable - Remarkable平板框架

PoC

color

从低延迟部分更新到电子墨水显示屏,再到多点触控、物理按钮和Wacom数字化器输入,所有这些现在都得到了理解,并且可以在本仓库中找到它们的最小到完整的实现。

此仓库实现了一个Rust库,以提供这些功能。可能为Remarkable创建了一个piston后端,允许使用conrod来简化UI创建。有关进一步文档,请参阅本仓库中的wiki

https://github.com/canselcik/RemarkableFramebuffer由于历史原因重定向到此仓库。

构建说明

设置工具链

为了构建 libremarkable 和示例程序(spy.sodemo),您需要 Remarkable 的工具链。下载 安装脚本rM2)并安装工具链。您可以在 维基百科 上找到更多信息。

然后,您可以使用以下命令设置 Rust 工具链进行交叉编译:rustup target add armv7-unknown-linux-gnueabihf

为了让 Rust 利用工具链,需要一个 .cargo/config 文件。此文件可以使用 gen_cargo_config.py 生成。首先,必须源工具链环境。其位置可以在工具链安装目录中找到。正确的路径也在工具链 维基百科 中引用。加载环境后,脚本将读取环境变量以生成适用于您的工具链的正确 .cargo/config 文件。

生成的配置文件看起来可能像这样

[target.armv7-unknown-linux-gnueabihf]
linker = "<toolchain_install_path>/sysroots/x86_64-codexsdk-linux/usr/bin/arm-remarkable-linux-gnueabi/arm-remarkable-linux-gnueabi-gcc"
rustflags = [
  "-C", "link-arg=-march=armv7-a",
  "-C", "link-arg=-marm",
  "-C", "link-arg=-mfpu=neon",
  "-C", "link-arg=-mfloat-abi=hard",
  "-C", "link-arg=-mcpu=cortex-a9",
  "-C", "link-arg=--sysroot=<toolchain_install_path>/sysroots/cortexa7hf-neon-remarkable-linux-gnueabi",
]

您还可以将此片段添加到上面的文件中,以便默认为此项目进行交叉编译

[build]
# Set the default --target flag
target = "armv7-unknown-linux-gnueabihf"

构建 libremarkable 和示例程序

为了方便起见,创建了一个简单的 Makefile 包装器。它公开了以下动词

  • examples:构建示例
  • library:构建库
  • all:库 + 示例

在设备上测试 libremarkable 和示例程序

提供的 Makefile 假设设备可在 10.11.99.1 上访问,并且 SSH 密钥认证已设置,以便您不必每次都输入密码。以下操作可用

  • run:停止 xochitl 后,在设备上构建并运行 demo.rs
  • start-xochitl:停止所有 xochitldemo 实例并正常启动 xochitl
  • spy-xochitl:构建 spy.rs 并将其加载到停止当前实例后的新实例中 LD_PRELOAD。这允许在 ioctl 调用中检测到官方程序使用的新枚举。

手动构建的进一步构建说明

如果您选择跳过 Makefile 并直接调用 cargo,请确保在参数中包含 --release --target=armv7-unknown-linux-gnueabihf,如下所示

➜  rust-poc git:(master) ✗ cargo build --release --target=armv7-unknown-linux-gnueabihf
   ...
   Compiling libremarkable v0.1.0 (file:///home/main/Desktop/libremarkable)
   Compiling rust-poc v0.1.0 (file:///home/main/Desktop/RemarkableFramebuffer/rust-poc)
    Finished dev [unoptimized + debuginfo] target(s) in 24.85 secs

--release 参数很重要,因为它启用了优化。没有优化,即使空闲时,CPU 利用率也会达到 ~70%。有了优化,框架运行得非常轻,空闲时 0% CPU 利用率,峰值时 1-2%。

使用 cross 构建

这种方式构建不需要 reMarkable 的工具链,也不需要在 Ubuntu 16.04 上使用 Docker 进行构建,因此设置应该更容易。

使用 cross 安装 cargo install cross。首先请确保 reMarkable 工具链未在使用中。

要构建、部署和运行 demo,只需

make TARGET=armv7-unknown-linux-gnueabihf deploy-x-demo
# This builds with
#   cross build --example demo --release --target=armv7-unknown-linux-gnueabihf
# then deploys the demo
使用 musl
  1. 编译:使用 cross build --example demo --release --target=armv7-unknown-linux-musleabihf(或 make x-demo
  2. 运行演示:make deploy-x-demo

关于 rM2 应用:您需要从 Toltec 获取 display 包。但是只包含服务器部分,因为客户端已经内置在这个库中。

遗留 C 实现

libremarkable 的第一个草案是一个 C 库,在逆向工程平板电脑时构建。它已不再维护,但可以在 legacy-c-impl 分支中找到。

依赖项

~17–27MB
~221K SLoC