#p3d #read-write #fsx

fsuipc

适用于 Rust 编程语言的 FSUIPC 客户端

5 个版本 (重大变更)

使用旧的 Rust 2015

0.5.0 2020 年 10 月 14 日
0.4.0 2017 年 12 月 17 日
0.3.0 2016 年 4 月 7 日
0.2.0 2015 年 9 月 15 日
0.1.0 2015 年 9 月 14 日

#143模拟

每月下载量 24

MPL-2.0 许可证

34KB
730

FSUIPC Rust 库

此库提供了在 FSUIPC 中实现客户端所需的代码,使用 Rust 语言

用法

FSUIPC 库基于以下两个特质

  • fsuipc::Handle,它代表一个 FSUIPC 的句柄。它不能用来读取或写入 FSUIPC 偏移量,但可以用来实例化 fsuipc::Session 对象。
  • fsuipc::Session,它代表一个会话,由一系列在调用 process() 方法时执行的读取和写入请求组成。

这对特质有两种不同的实现。

  • fsuipc::local::LocalHandle 代表使用 FSUIPC 的本地模式的处理器。在这种模式下,与 FSUIPC 的通信是通过本地内存寻址来完成的。它要求客户端代码在 FSUIPC 相同的进程中运行。换句话说,您的代码必须是一个 FS/P3D 模块或仪表,才能使用此模式。
  • fsuipc::user::UserHandle 代表使用 FSUIPC 的用户模式的处理器。在这种模式下,通信是通过磁盘映射内存来完成的。这使得可以在单独的进程中运行您的代码。

让我们看看一些示例

// First we create both handle & session using a local IPC.
let mut fsuipc = try!(fsuipc::local::LocalHandle::new());
let mut session = fsuipc.session();

// This variable will be use to store the result of reading the altitude
let mut altitude: u32 = 0;

// This is the value of QNH that we are gonna write to FSUIPC
let qnh: u16 = 1020 * 16;

// We request to read from offset 0x3324 and save the result in `altitude`.
// The length of the offset to read is inferred from the variable type
// (`altitude` is u32, so 4 bytes are requested).
try!(session.read(0x3324, &mut altitude));

// We request to write to offset 0x0330 from the contents of `qnh`.
// The length of the offset to write is inferred from the variable type
// (`qnh` is u16, so 2 bytes are requested).
try!(session.write(0x0330, &qnh));

// Now all the requests are processed. After that, `altitude` will receive
// the value read from FSUIPC, and offset 0x0330 will be updated with the
// value of `qnh`. This call consumes the `session` object. For further
// reads and writes, another session must be created.
try!(session.process());

用户模式的代码几乎相同。只需更改句柄实例化的方式

let mut fsuipc = try!(fsuipc::user::UserHandle::new());

其余代码同样适用于用户模式。

您还可以查看 Hello World 示例

已知限制

  • 它已在 i686、32 位架构的平台上进行成功测试。已添加对 x86_64 的支持,但尚未完全测试。
  • 它尚未与 WideFS 进行测试。预计将失败,因为它使用与 FSUIPC 不同的窗口标识符。

许可证

此代码根据 Mozilla Public License v2 条款发布。

依赖项

~290KB