rs162 0.1.5

NMEA AIS Message Parser and Decoder with deku-based AIS message structures
Documentation
use desperado::IqFormat;
use rs162::{decode::mmsi::MmsiInfo, dsp::ais::AIS_SAMPLE_RATE_288K, sources::AisIqSource};
use serde_json::json;
use std::env;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let addr = env::args()
        .nth(1)
        .unwrap_or_else(|| "127.0.0.1:1234".to_string());

    let host = addr.split(':').next().unwrap_or(&addr);
    let port = if addr.contains(':') {
        0
    } else {
        addr.split(':').nth(1).unwrap_or("1234").parse()?
    };

    let receiver = AisIqSource::from_tcp(host, port, AIS_SAMPLE_RATE_288K, IqFormat::Cu8)?;

    for result in receiver {
        match result {
            Ok(msg) => {
                if let Some(ais_msg) = msg.decode() {
                    let output = json!({
                        "signal_level": msg.signal_level,
                        "timestamp": msg.timestamp,
                        "channel": msg.channel,
                        "message": ais_msg,
                        "mmsi_info": MmsiInfo::from_message(&ais_msg).ok()
                    });
                    println!("{}", serde_json::to_string(&output).unwrap());
                }
            }
            Err(e) => {
                eprintln!("stream error: {e}.\nhelp: try `rtl_tcp -a 127.0.0.1 -p 1234 -f 162000000 -s 288000 -g 49.6`");
                break;
            }
        }
    }

    Ok(())
}