1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//! ACARS (Aircraft Communications Addressing and Reporting
//! System) decoder. Faithful Rust port of
//! [acarsdec](https://github.com/TLeconte/acarsdec) — pure
//! DSP + parsing, no GTK, no SDR-driver dependency.
//!
//! # Example: multi-channel decode from a 2.5 `MSps` complex IQ stream
//!
//! ```no_run
//! use num_complex::Complex32;
//! use sdr_acars::ChannelBank;
//!
//! const US_ACARS: &[f64] = &[
//! 129_125_000.0, 130_025_000.0, 130_425_000.0,
//! 130_450_000.0, 131_525_000.0, 131_550_000.0,
//! ];
//!
//! # fn read_iq_block() -> Vec<Complex32> { Vec::new() }
//! // Center on the midpoint of the channel extremes (130.3375 MHz)
//! // so the 2.425 MHz cluster fits inside the 2.5 MHz Nyquist window.
//! let mut bank =
//! ChannelBank::new(2_500_000.0, 130_337_500.0, US_ACARS)?;
//! loop {
//! let iq: Vec<Complex32> = read_iq_block();
//! if iq.is_empty() { break; }
//! bank.process(&iq, |msg| {
//! let label = String::from_utf8_lossy(&msg.label);
//! println!("{} {label} {}", msg.aircraft, msg.text);
//! });
//! }
//! # Ok::<(), sdr_acars::AcarsError>(())
//! ```
//!
//! For pre-decimated 12.5 kHz IF input (e.g. WAV files written
//! by acarsdec's `--save` mode, one channel per WAV channel),
//! drive [`msk::MskDemod`] + [`frame::FrameParser`] directly
//! instead — see `bin/sdr-acars-cli.rs` for the WAV path.
pub use ;
pub use AcarsError;
pub use ;
pub use serialize_message as serialize_acars_json;
pub use lookup as lookup_label;
pub use ;
pub use ;
pub use ;