1pub mod blocks;
43pub mod crc;
44pub mod error;
45pub mod header;
46pub mod reader;
47pub mod types;
48
49pub use blocks::{
51 block_ids,
53 block_name,
54 fallback_name,
55 BaseVectorCartBlock,
57 BaseVectorGeodBlock,
58 BdsAlmBlock,
59 BdsCNav2Block,
60 BdsCNav3Block,
61 BdsNavBlock,
63 BdsRawB1cBlock,
64 BdsRawB2aBlock,
65 BdsUtcBlock,
66 ChannelStatusBlock,
68 CosmosStatusBlock,
69 DiskData,
70 DiskStatusBlock,
71 DopBlock,
72 DynDnsStatusBlock,
73 EncapsulatedOutputBlock,
74 EndOfPvtBlock,
76 ExtEventAttEulerBlock,
77 ExtEventBaseVectGeodBlock,
78 GalNavBlock,
80 GeoRawL5Block,
81 GisActionBlock,
82 GisDatabaseStatus,
83 GisStatusBlock,
84 GloNavBlock,
85 GpsNavBlock,
86 IrnssRawBlock,
87 LBandBeamInfo,
88 LBandBeamsBlock,
89 Meas3BlockSet,
90 Meas3Cn0HiResBlock,
91 Meas3DecodedEpoch,
92 Meas3Decoder,
93 Meas3DopplerBlock,
94 Meas3Measurement,
95 Meas3MpBlock,
96 Meas3PpBlock,
97 Meas3RangesBlock,
98 Meas3Satellite,
99 MeasEpochBlock,
101 NtripClientStatusBlock,
102 NtripConnectionSlot,
103 NtripServerStatusBlock,
104 P2ppSession,
105 P2ppStatusBlock,
106 PosCartBlock,
107 PosCovCartesianBlock,
108 PosCovGeodeticBlock,
109 PosLocalBlock,
110 PosProjectedBlock,
111 PvtCartesianBlock,
112 PvtGeodeticBlock,
113 PvtSupportABlock,
114 QzsAlmBlock,
115 QzsNavBlock,
116 ReceiverStatusBlock,
117 ReceiverTimeBlock,
118 RfBandEntry,
119 RfStatusBlock,
120 RtcmDatumBlock,
121 RxMessageBlock,
122 SatVisibilityBlock,
123 SatVisibilityInfo,
124 SatelliteMeasurement,
125 SbfBlock,
127 VelCovCartesianBlock,
128 VelCovGeodeticBlock,
129};
130
131pub use crc::{calculate_block_crc, crc16_ccitt, validate_block};
132pub use error::{SbfError, SbfResult};
133pub use header::{SbfHeader, SBF_SYNC};
134pub use reader::{ReaderStats, SbfReadExt, SbfReader};
135pub use types::{Constellation, PvtError, PvtMode, SatelliteId, SignalType};
136
137pub const VERSION: &str = env!("CARGO_PKG_VERSION");
139
140pub const SYNC_BYTES: [u8; 2] = SBF_SYNC;
142
143#[cfg(test)]
144mod tests {
145 use super::*;
146
147 #[test]
148 fn test_version() {
149 let parts: Vec<_> = VERSION.split('.').collect();
150 assert_eq!(parts.len(), 3);
151 assert!(parts.iter().all(|part| !part.is_empty()));
152 }
153
154 #[test]
155 fn test_sync_bytes() {
156 assert_eq!(SYNC_BYTES, [0x24, 0x40]);
157 }
158}