diff --git a/config.example.toml b/config.example.toml index 765dd9d6bae7c6a09355fc3b40da2b758f4fb8b6..d70a741d2c38393e9b60646b6c7a6382b0117a4b 100644 --- a/config.example.toml +++ b/config.example.toml @@ -3,6 +3,7 @@ ssid = 0 icon = 0 frequency = 430_500_000 # The standard CATS frequency enable_tx = true # If false, will be an RX-only I-Gate +debug = false # If true, print additional packet debug information [felinet] address = "https://felinet.cats.radio" diff --git a/src/config.rs b/src/config.rs index e6723ac183c0190fdfb9747e3fabcaf745e0daa9..96f8f0d63dfd67a95f45265566aef7f8fceb8fae 100644 --- a/src/config.rs +++ b/src/config.rs @@ -47,6 +47,8 @@ pub struct Config { pub frequency: u32, #[serde(default = "default_enable_tx")] pub enable_tx: bool, + #[serde(default)] + pub debug: bool, pub felinet: Option<FelinetConfig>, pub beacon: BeaconConfig, } diff --git a/src/gate.rs b/src/gate.rs index 7c000728c6690ff0fc3b94463e0e6aeeb4502592..bbf71e12f97a4650accd6890cb7aaef146f8c13d 100644 --- a/src/gate.rs +++ b/src/gate.rs @@ -184,6 +184,7 @@ pub async fn packet_handler( packet_send: mpsc::Sender<Vec<u8>>, mut packet_receive: mpsc::Receiver<(Vec<u8>, f64)>, uuid: Uuid, + debug: bool, ) -> anyhow::Result<()> { loop { let (packet, rssi) = packet_receive @@ -192,7 +193,7 @@ pub async fn packet_handler( .context("Packet receive channel died")?; let mut buf = [0; MAX_PACKET_LEN]; - if let Ok(mut packet) = attempt_decode(&packet, &mut buf, rssi) { + if let Some(mut packet) = attempt_decode(&packet, &mut buf, rssi, debug) { let mut buf2 = [0; MAX_PACKET_LEN]; let mut internet_packet = packet.clone_backing(&mut buf2); match append_internet_to_packet_route(&callsign, ssid, rssi, &mut internet_packet) { diff --git a/src/main.rs b/src/main.rs index 3253781d387d9459671af5e4deb82674f6ee3dd6..f4b0963bb45b0fb7c0e8313c043bee7681f7c5ad 100644 --- a/src/main.rs +++ b/src/main.rs @@ -143,6 +143,7 @@ async fn gate_forever( let packet_send = packet_send.clone(); let ssid = config.ssid; let callsign = config.callsign.clone(); + let debug = config.debug; tokio::task::spawn(async move { if let Err(e) = packet_handler( @@ -152,6 +153,7 @@ async fn gate_forever( packet_send, packet_receive, uuid, + debug, ) .await { diff --git a/src/util.rs b/src/util.rs index eda22addf3d2e080c8e2e792264a869383e76b96..776e44dec568e0625df464be5952be41d6394fa2 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,5 +1,4 @@ use crate::radio::MAX_PACKET_LEN; -use anyhow::anyhow; use colored::{Color, Colorize}; use ham_cats::{ identity::Identity, @@ -126,13 +125,25 @@ pub fn attempt_decode<'a>( packet: &[u8], buf: &'a mut [u8; MAX_PACKET_LEN], rssi: f64, -) -> anyhow::Result<Packet<'a, MAX_PACKET_LEN>> { - let packet: Packet<MAX_PACKET_LEN> = - Packet::fully_decode(packet, buf).map_err(|e| anyhow!("Could not decode packet: {e:?}"))?; + debug: bool, +) -> Option<Packet<'a, MAX_PACKET_LEN>> { + if debug { + eprintln!("Attempt decode with len: {}", packet.len()); + } + let packet: Packet<MAX_PACKET_LEN> = match Packet::fully_decode(packet, buf) { + Ok(x) => x, + Err(e) => { + if debug { + eprintln!("Could not decode packet: {e}"); + } + + return None; + } + }; print_packet(&packet, Some(rssi)); - Ok(packet) + Some(packet) } // i-gating is kind of weird.