Skip to main content

sbf_tools/
lib.rs

1//! # SBF - Septentrio Binary Format Parser
2//!
3//! Parse Septentrio Binary Format (SBF) streams from GNSS receivers.
4//!
5//! ## Features
6//!
7//! - Read SBF blocks from any `Read` source
8//! - Decode measurement, PVT, nav, status, SBAS, INS, and event blocks
9//! - Decode `Meas3` epochs with the stateful `Meas3Decoder`
10//! - Keep unknown blocks as raw payloads
11//! - Parse-only API
12//!
13//! ## Quick Start
14//!
15//! ```no_run
16//! use std::fs::File;
17//! use sbf_tools::{SbfReader, SbfBlock};
18//!
19//! let file = File::open("data.sbf").unwrap();
20//! let reader = SbfReader::new(file);
21//!
22//! for result in reader {
23//!     match result {
24//!         Ok(block) => match block {
25//!             SbfBlock::PvtGeodetic(pvt) => {
26//!                 if let (Some(lat), Some(lon)) = (pvt.latitude_deg(), pvt.longitude_deg()) {
27//!                     println!("Position: {:.6}°, {:.6}°", lat, lon);
28//!                 }
29//!             }
30//!             SbfBlock::Dop(dop) => {
31//!                 println!("PDOP: {:.2}, HDOP: {:.2}", dop.pdop(), dop.hdop());
32//!             }
33//!             _ => {}
34//!         },
35//!         Err(e) => eprintln!("Error: {}", e),
36//!     }
37//! }
38//! ```
39//!
40//! See `README.md` and the examples under `examples/` for block counting and `Meas3` decoding.
41
42pub mod blocks;
43pub mod crc;
44pub mod error;
45pub mod header;
46pub mod reader;
47pub mod types;
48
49// Re-export commonly used items at crate root
50pub use blocks::{
51    // Block IDs
52    block_ids,
53    block_name,
54    fallback_name,
55    // Position
56    BaseVectorCartBlock,
57    BaseVectorGeodBlock,
58    BdsAlmBlock,
59    BdsCNav2Block,
60    BdsCNav3Block,
61    // Extended nav / position
62    BdsNavBlock,
63    BdsRawB1cBlock,
64    BdsRawB2aBlock,
65    BdsRawB2bBlock,
66    BdsUtcBlock,
67    // Status
68    ChannelStatusBlock,
69    CosmosStatusBlock,
70    DiskData,
71    DiskStatusBlock,
72    DopBlock,
73    DynDnsStatusBlock,
74    EncapsulatedOutputBlock,
75    // Time
76    EndOfPvtBlock,
77    ExtEventAttEulerBlock,
78    ExtEventBaseVectGeodBlock,
79    // Navigation
80    GalAuthStatusBlock,
81    GalNavBlock,
82    GeoRawL5Block,
83    GisActionBlock,
84    GisDatabaseStatus,
85    GisStatusBlock,
86    GloNavBlock,
87    GpsNavBlock,
88    IrnssRawBlock,
89    LBandBeamInfo,
90    LBandBeamsBlock,
91    Meas3BlockSet,
92    Meas3Cn0HiResBlock,
93    Meas3DecodedEpoch,
94    Meas3Decoder,
95    Meas3DopplerBlock,
96    Meas3Measurement,
97    Meas3MpBlock,
98    Meas3PpBlock,
99    Meas3RangesBlock,
100    Meas3Satellite,
101    // Measurement
102    MeasEpochBlock,
103    NtripClientStatusBlock,
104    NtripConnectionSlot,
105    NtripServerStatusBlock,
106    P2ppSession,
107    P2ppStatusBlock,
108    PosCartBlock,
109    PosCovCartesianBlock,
110    PosCovGeodeticBlock,
111    PosLocalBlock,
112    PosProjectedBlock,
113    PvtCartesianBlock,
114    PvtGeodeticBlock,
115    PvtSupportABlock,
116    QzsAlmBlock,
117    QzsNavBlock,
118    ReceiverStatusBlock,
119    ReceiverTimeBlock,
120    RfBandEntry,
121    RfStatusBlock,
122    RtcmDatumBlock,
123    RxMessageBlock,
124    SatVisibilityBlock,
125    SatVisibilityInfo,
126    SatelliteMeasurement,
127    // Main enum
128    SbfBlock,
129    VelCovCartesianBlock,
130    VelCovGeodeticBlock,
131};
132
133pub use crc::{calculate_block_crc, crc16_ccitt, validate_block};
134pub use error::{SbfError, SbfResult};
135pub use header::{SbfHeader, SBF_SYNC};
136pub use reader::{ReaderStats, SbfReadExt, SbfReader};
137pub use types::{Constellation, PvtError, PvtMode, SatelliteId, SignalType};