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

Download history 54/week @ 2024-03-11 94/week @ 2024-03-18 153/week @ 2024-03-25 103/week @ 2024-04-01 158/week @ 2024-04-08 179/week @ 2024-04-15 238/week @ 2024-04-22 86/week @ 2024-04-29 33/week @ 2024-05-06 91/week @ 2024-05-13 63/week @ 2024-05-20 26/week @ 2024-05-27 86/week @ 2024-06-03 74/week @ 2024-06-10 73/week @ 2024-06-17 69/week @ 2024-06-24

303 每月下载量
3 个crate中使用(通过 ublox

MIT 许可证

95KB
2.5K SLoC

uBlox for Rust

Rust ublox on docs.rs MIT licensed rustc v1.65

本项目旨在构建一个用于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