11 个版本
0.4.5 | 2023 年 12 月 1 日 |
---|---|
0.4.4 | 2023 年 9 月 28 日 |
0.4.2 | 2022 年 4 月 30 日 |
0.4.1 | 2022 年 3 月 20 日 |
0.1.0 | 2019 年 7 月 25 日 |
#56 在 硬件支持
295 每月下载
用于 2 crates
200KB
5K SLoC
uBlox for Rust
该项目旨在为 uBlox GPS 设备构建一个纯 Rust I/O 库,特别使用 UBX 协议。
库的使用示例可以在 examples/ 目录中找到。一个与 uBlox 设备交互的基本 CLI 可以在 examples/ublox-cli 目录中找到。请参阅具体的 examples/README。
构建数据包
使用数据包的 Builder
变体来构建数据包,例如
use ublox::{CfgPrtUartBuilder, UartPortId, UartMode, DataBits, Parity, StopBits, InProtoMask, OutProtoMask};
let packet: [u8; 28] = CfgPrtUartBuilder {
portid: UartPortId::Uart1,
reserved0: 0,
tx_ready: 0,
mode: UartMode::new(DataBits::Eight, Parity::None, StopBits::One),
baud_rate: 9600,
in_proto_mask: InProtoMask::all(),
out_proto_mask: OutProtoMask::UBLOX,
flags: 0,
reserved5: 0,
}.into_packet_bytes();
对于可变大小的数据包如 CfgValSet
,您可以将其构建为新的 Vec<u8>
use ublox::{cfg_val::CfgVal::*, CfgLayer, CfgValSetBuilder};
let packet_vec: Vec<u8> = CfgValSetBuilder {
version: 1,
layers: CfgLayer::RAM,
reserved1: 0,
cfg_data: &[UsbOutProtNmea(true), UsbOutProtRtcm3x(true), UsbOutProtUbx(true)],
}
.into_packet_vec();
let packet: &[u8] = packet_vec.as_slice();
或者通过扩展现有的一个
let mut packet_vec = Vec::new();
CfgValSetBuilder {
version: 1,
layers: CfgLayer::RAM,
reserved1: 0,
cfg_data: &[UsbOutProtNmea(true), UsbOutProtRtcm3x(true), UsbOutProtUbx(true)],
}
.extend_to(&mut packet_vec);
let packet = packet_vec.as_slice();
请参阅各个 Builder
结构体的文档,了解字段信息。
解析数据包
通过实例化一个 Parser
对象,然后使用其 consume()
方法将数据添加到其中来解析数据包。解析器包含一个内部数据缓冲区,当调用 consume()
时,数据被复制到内部缓冲区,并返回一个类似迭代器的对象以访问数据包。例如
use ublox::Parser;
let mut parser = Parser::default();
let my_raw_data = vec![1, 2, 3, 4]; // From your serial port
let mut it = parser.consume(&my_raw_data);
loop {
match it.next() {
Some(Ok(packet)) => {
// We've received a &PacketRef, we can handle it
}
Some(Err(_)) => {
// Received a malformed packet
}
None => {
// The internal buffer is now empty
break;
}
}
}
无 std 支持
此库支持具有确定大小 Parser
的无 std 环境。有关更多信息,请参阅文档。
最低支持的 Rust 版本
该库将至少支持上一年度的 Rust 编译器。当前,最低支持的 Rust 版本(MSRV)是 1.65.0
。注意,由于我们处于 1.0 版本之前,打破 MSRV 不会强制进行小版本更新 - MSRV 可以在补丁更新中更改。
依赖项
~3MB
~61K SLoC