diff --git a/examples/dump_channel_info.rs b/examples/dump_channel_info.rs new file mode 100644 --- /dev/null +++ b/examples/dump_channel_info.rs @@ -0,0 +1,29 @@ +#![allow(clippy::unwrap_used)] + +use std::fmt::Debug; + +use arctictis::{ + Command, ProgramModeScanner, Scanner, + bc125at::channel_info::{ChannelIndex, GetChannelInfo}, +}; + +#[tokio::main] +async fn main() { + let mut scanner = Scanner::open().unwrap(); + println!("{scanner:#?}"); + + scanner + .with_program_mode(async |mut scanner| { + for i in 1..=500 { + let idx = ChannelIndex::new(i).unwrap(); + let channel_info = scanner.command(GetChannelInfo(idx)).await.unwrap(); + println!( + "{i}: {}, {}", + String::from_utf8_lossy(channel_info.frequency.value()), + String::from_utf8_lossy(channel_info.name.value()), + ); + } + }) + .await + .unwrap(); +} diff --git a/src/codec.rs b/src/codec.rs --- a/src/codec.rs +++ b/src/codec.rs @@ -78,9 +78,13 @@ return Err(ResponseError::WrongNumberOfFields); } - let response = Cmd::Response::deserialize(self.raw_values.iter())?; - - Ok(response) + match Cmd::Response::deserialize(self.raw_values.iter()) { + Ok(r) => Ok(r), + Err(e) => { + dbg!(&self.raw_values); + Err(e.into()) + } + } } } diff --git a/src/macros.rs b/src/macros.rs --- a/src/macros.rs +++ b/src/macros.rs @@ -195,6 +195,10 @@ (name.len() <= $max_len) .then_some(Self(Vec::from(name))) } + + pub fn value(&self) -> &[u8] { + &self.0 + } } impl crate::command::IntoParam for $name { diff --git a/src/command/bc125at/channel_info.rs b/src/command/bc125at/channel_info.rs --- a/src/command/bc125at/channel_info.rs +++ b/src/command/bc125at/channel_info.rs @@ -22,7 +22,7 @@ Fm => b"FM", Nfm => b"NFM", }, - ctcss_dcs_status: range CtcssDcsStatus (0..=231 => usize), + ctcss_dcs_status: range CtcssDcsStatus (0..=240 => usize), delay: enum Delay { Neg10 => b"-10", Neg5 => b"-5",