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
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