diff --git a/src/sources/prs10.rs b/src/sources/prs10.rs index 4055172..ceb2f6c 100644 --- a/src/sources/prs10.rs +++ b/src/sources/prs10.rs @@ -1,3 +1,4 @@ +use std::any::type_name; use std::str::FromStr; use std::sync::Arc; @@ -225,7 +226,7 @@ pub struct Prs10Stats { pub ocxo_efc: u32, pub error_signal_volts: f64, pub detect_signal_volts: f64, - pub freq_offset_ppt: u16, + pub freq_offset_ppt: i16, pub mag_efc: u16, pub heat_volts: f64, pub elec_volts: f64, @@ -363,7 +364,10 @@ impl Prs10Monitor { let mut buf = Vec::new(); let read = timeout(self.config.timeout, reader.read_until(b'\r', &mut buf)).await??; buf.truncate(buf.len() - 1); // strip "\r" - debug!("response: ({read}) `{buf:?}`"); + debug!( + "raw response: ({read}) `{}`", + str::from_utf8(&buf).unwrap_or("") + ); Ok(buf) } @@ -391,13 +395,11 @@ impl Prs10Monitor { } pub async fn get_analog(&mut self, id: u16) -> Result> { - debug!("Getting analog value {id}"); let mut cmd = b"AD".to_vec(); cmd.extend_from_slice(id.to_string().as_bytes()); cmd.push(b'?'); - let resp = self.cmd_response(&cmd).await?; - let value = str::from_utf8(&resp)?.parse::()?; - + let value = self.get_parsed(&cmd).await?; + debug!("Got: {value}"); Ok(value) } @@ -408,7 +410,11 @@ impl Prs10Monitor { where T::Err: std::error::Error + 'static, { - debug!("Getting int value for command {cmd:?}"); + debug!( + "Getting parsed <{}> value for command {}", + type_name::(), + str::from_utf8(cmd).unwrap_or(""), + ); let resp = self.cmd_response(cmd).await?; let val = str::from_utf8(&resp)?.parse::()?; Ok(val) @@ -430,18 +436,18 @@ impl Prs10Monitor { } pub async fn get_detected_signals(&mut self) -> Result<(f64, f64), Box> { - debug!("Getting detected signals pair"); + debug!("Getting i16,i16 -> f64,f64 detected signals pair"); let resp = self.cmd_response(b"DS?").await?; let (error, signal) = resp .splitn(2, |c| *c == b',') - .map(|s| str::from_utf8(s).unwrap().parse::()) + .map(|s| str::from_utf8(s).unwrap().parse::()) .collect_tuple() .ok_or("Not enough values in response to DS?".to_string())?; Ok((error? as f64 * 0.15e-6, signal? as f64 * 0.001)) } + #[instrument(skip_all)] async fn status_poll(&mut self) -> Result> { - debug!("polling status"); let status = self.get_status().await?; Ok(ChimemonMessage::SourceReport(SourceReport { name: "prs10".into(), @@ -454,14 +460,13 @@ impl Prs10Monitor { })) } + #[instrument(skip_all)] async fn stats_poll(&mut self) -> Result> { const ANALOG_SCALING: [f64; 20] = [ 0.0, 10.0, 10.0, 10.0, 10.0, 1.0, 1.0, 1.0, 1.0, 4.0, 100.0, 1.0, 1.0, 1.0, 1.0, 1.0, 4.0, 4.0, 4.0, 1.0, ]; - debug!("polling stats"); - let stats_span = debug_span!("get_stats_serial"); let stats_guard = stats_span.enter(); let ocxo_efc = self.get_ocxo_efc().await?;