5个版本
0.1.0 | 2023年9月28日 |
---|---|
0.0.4 | 2022年3月20日 |
0.0.3 | 2021年6月27日 |
0.0.2 | 2020年11月29日 |
0.0.1 | 2020年5月17日 |
#6 在 #ublox
303 每月下载量
在 3 个crate中使用(通过 ublox)
95KB
2.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;
}
}
}
支持no_std
此库支持具有确定大小Parser
的no_std环境。请参阅文档以获取更多信息。
最低支持的Rust版本
该库将支持至少上一年的Rust编译器。目前,最低支持的Rust版本(MSRV)为 1.65.0
。请注意,因为我们还在1.0版本之前,打破MSRV不会强制进行小版本更新 - MSRV可以在补丁更新中更改。
依赖项
~1.5MB
~35K SLoC